打印

类继承和虚继承问题

[复制链接]
999|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2012-8-24 18:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
class AA
{
public:
AA():i(1){}
int i;
};
class BB: public AA
{
public:
BB():j(2){}
int j;
};

int ff(AA* p, int count)
{
int total=0;
for(int i=0; i <count; ++i)
{
total+=p++->i;
}
return (total);
}

int main()
{
BB b[11];
cout << ff(b,10) << endl;
return 0;
}

以上程序段输出为何是15?
另外, 我若用虚继承, 即 class BB: virtual public AA{...}
其他程序不变, 输出是一个很大的数字, 为什么?

相关帖子

沙发
火箭球迷| | 2012-8-24 18:11 | 只看该作者
多态和数组是不兼容的

使用特权

评论回复
板凳
xsgy123| | 2012-8-24 18:20 | 只看该作者
你构造了11个BB的对象,并且里面数据成员i都初始化1,j都初始化2,但把数组的首地址给AA的对象,那么在for循环中,由于是AA的对象指针,那么每四个字节是一个对象。最后结果就是执行了5个1,与5个2相加。
当用虚函数时,那么构造了11个BB的对象中每个对象占用的内存大小不再是8个字节,而是12个字节,里面有一个指针指向父类的虚表,所以最后每个字节之和就会非常的大。

使用特权

评论回复
地板
hsbjb| | 2012-8-24 18:28 | 只看该作者
LS分析的很有道理

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝