类的大小

来源:互联网 发布:hadoop mr算法 编辑:程序博客网 时间:2024/05/21 20:30
C/C++ code
#include<iostream>using namespace std;class Base{public: Base() { x=0; } int x;};class Derived1:virtual public Base{public: Derived1() { x=10; }};class Derived2:virtual public Base{public: Derived2() { x=20; }};class Derived:public Derived1,public Derived2 { };int main(){ Derived obj; cout<<"sizeof(Base)="<<sizeof(Base)<<endl; cout<<"sizeof(Derived1)="<<sizeof(Derived1)<<endl; cout<<"sizeof(Derived2)="<<sizeof(Derived2)<<endl; cout<<"sizeof(Derived)="<<sizeof(Derived)<<endl; cout<<"obj.x="<<obj.x<<endl; return 0;}

结果:
sizeof(Base)=4
sizeof(Derived1)=8
sizeof(Derived2)=8
sizeof(Derived)=12
obj.x=20
Press any key to continue

问题1:虚拟继承到底是怎样继承父类的数据成员的??为何sizeof(Base)=4,
而sizeof(Derived1)=8,sizeof(Derived)=12



问题2:为何obj.x的值是20 而不是10



问题1:虚拟继承到底是怎样继承父类的数据成员的??为何sizeof(Base)=4,
而sizeof(Derived1)=8,sizeof(Derived)=12

Base因为int x大小为4.
Derived1为8因为int x为4+虚基类指针4
Derived为12是因为int x为4+Derived1虚基类指针4+Derived的虚基类指针


问题2:为何obj.x的值……

正是这样,补充一下,他调用的顺序是先Derived1(),x=10;接着Derived2(),x=20;依次从继承列表顺序依次调用

原创粉丝点击