注册 登录
编程论坛 C++教室

[求助]多太性问题

xbw0114 发布于 2007-09-18 21:45, 832 次点击
#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);
}
新手,帮忙解释下该程序哦~
4 回复
#2
reedleaf2007-09-18 22:54

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

#3
reedleaf2007-09-18 22:58
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);
}

修改成以上代码,便能实现多态。
#4
xbw01142007-09-19 07:49
以下是引用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编辑过]

#5
青格儿2007-09-19 09:26
定义基类成员函数时在函数说明前加关键字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;
}

改成这样就行了!
1