菜鸟问问题 帮我看一下这个输出结果
本帖最后由 happylily123 于 2012-12-25 13:22:21 编辑
class Shape
{
public:
virtual void display(){
cout<<"shape"<<endl;
}
};
class Circle:public Shape
{
public:
void display()
{
cout<<"circle"<<endl;
}
};
class Rect:public Shape
{
public:
void display(){
cout<<"rect"<<endl;
}
};
void main()
{
Shape a;
Circle b;
Rect c;
a.display();
b.display();
c.display();
Shape *p=new Shape[3];
p[0]=a;
p[1]=b;
p[2]=c;
for(int i=0;i<3;i++)
p[i].display();
delete []p;
}
输出结果:?
[解决办法]
如果你想试试虚继承的话,应该是这样:
Shape* t = new Rect();
t->display();
或
Circle x;
Shape& q = x;
q.display();
C++的多态需要指针和引用实现。
你代码里的
p[0]=a;
p[1]=b;
p[2]=c;
发生了隐式类型转换
[解决办法]
p是一个指针,指向一个Shape数组
p[0]=a; 把a付值给p[0],p[0]的类型还是Shape,大致等于p[0]=(Shape)a;
p[i].display();通过函数调用对象,不存在虚函数的问题