标题:[求助]多太性问题
只看楼主
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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-171036-1-1.html




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

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