| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 828 人关注过本帖
标题:[求助]多太性问题
只看楼主 加入收藏
xbw0114
Rank: 1
等 级:新手上路
帖 子:141
专家分:0
注 册:2007-8-8
收藏
 问题点数:0 回复次数:4 
[求助]多太性问题
#include <iostream.h>
class A
{
public :
void f()
{
cout<<"a.f"<<endl;
}
};
class B: public A
{
public :
virtual void f(){}
};
class C: public B
{
public :
virtual void f()
{
cout<<"C"<<endl;
}
};
void show (A*x)
{
x->f();
}
void main ()
{
A*a=new A;
show(a);
A*b=new B;
show (b);
A*c=new C;
show (c);
}
新手,帮忙解释下该程序哦~
搜索更多相关主题的帖子: 性问题 void public show class 
2007-09-18 21:45
reedleaf
Rank: 2
等 级:新手上路
威 望:3
帖 子:62
专家分:0
注 册:2007-8-5
收藏
得分:0 

因为
class A
{
public :
void f()
{
cout<<"a.f"<<endl;
}
};
中f()不是虚函数
所以不能实现多态
结果是
a.f
a.f
a.f


2007-09-18 22:54
reedleaf
Rank: 2
等 级:新手上路
威 望:3
帖 子:62
专家分:0
注 册:2007-8-5
收藏
得分:0 
void show (B*x)
{
x->f();
}
void main ()
{
// B *a=new A;
// show(a);
B *b=new B;
show (b);
B *c=new C;
show (c);
}

修改成以上代码,便能实现多态。

2007-09-18 22:58
xbw0114
Rank: 1
等 级:新手上路
帖 子:141
专家分:0
注 册:2007-8-8
收藏
得分:0 
以下是引用reedleaf在2007-9-18 22:54:47的发言:

因为
class A
{
public :
void f()
{
cout<<"a.f"<<endl;
}
};
中f()不是虚函数//问个小白的问题哦,为什么基类不是虚构函数就不能实现多态呀?
所以不能实现多态
结果是
a.f
a.f
a.f

[此贴子已经被作者于2007-9-19 7:49:30编辑过]


勤奋造就未来
2007-09-19 07:49
青格儿
Rank: 4
等 级:贵宾
威 望:11
帖 子:698
专家分:20
注 册:2007-7-31
收藏
得分:0 
定义基类成员函数时在函数说明前加关键字virtual,这才是虚函数.
#include <iostream>
using namespace std;
class A
{
public :
virtual void f()
{
cout<<"a.f"<<endl;
}
};
class B: public A
{
public :
void f()
{
cout<<"b.f"<<endl;
}
};
class C: public B
{
public :
void f()
{
cout<<"c.f"<<endl;
}
};
void show (A*x)
{
x->f();
}
int main ()
{
A*a=new A;
show(a);
A*b=new B;
show (b);
A*c=new C;
show (c);
return 0;
}

改成这样就行了!
2007-09-19 09:26
快速回复:[求助]多太性问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019947 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved