类继承和虚继承问题

[复制链接]
1483|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

粉丝
快速回复 在线客服 返回列表 返回顶部