首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学者问有关问题 帮小弟我看一上这个输出结果

2012-12-30 
菜鸟问问题帮我看一下这个输出结果本帖最后由 happylily123 于 2012-12-25 13:22:21 编辑class Shape{publ

菜鸟问问题 帮我看一下这个输出结果
本帖最后由 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();通过函数调用对象,不存在虚函数的问题

热点排行
Bad Request.