using namespace std;
class a{};
class b{
int b1;
public:
b(int a){b1=a;cout<<"make b"<<endl;}
virtual void show(){cout<<b1<<" show b"<<endl;}
};
class c:virtual public b{
int c1;
public:
c(int a,int b):b(a){c1=b;cout<<"make c"<<endl;}
void show(){cout<<"show c"<<endl; }
};
class d:public b{
int d1;
public:
d(int a,int b):b(a){d1=b;cout<<"make d"<<endl;}
void show(){cout<<"show d"<<endl;}
};
class e:public c,public d{
//int e;
public:
e(int a,int b1,int c,int i,int l):c(a,b1),d(c,i),b(l){cout<<"make e"<<endl;}
void show(){/*b:: show();*/cout<<"--show e"<<endl;}
};
void test(b s){s.show();}
void main()
{
cout<<sizeof(a)<<","<<sizeof(b)<<","<<sizeof(c)<<","<<sizeof(d)<<","<<sizeof(e)<<endl;
}
如果有谁可以看懂为什么输出的是1,8,20,12,32的话,就说一下,比如那20中都有什么东西啊,还有那12,那32更是一塌糊涂啦
5 个解决方案
#1
连《深度探索C++对象模型》都不肯去探索虚继承,楼主就省点心吧。
大概答案知道:vptr和vbtr
大概答案知道:vptr和vbtr
#2
程序一行注释都没有。。。。
下次提问的时候记着加点注释。。。
下次提问的时候记着加点注释。。。
#3
楼主想了解得去学一下《编译原理》了,我不是很清楚了
#4
C++对象模型
不同的编译器有不同的做法
自己写点测试代码转成汇编代码就很清楚了。
不同的编译器有不同的做法
自己写点测试代码转成汇编代码就很清楚了。
#5
我事大二的一破大学生,俺们的老师破老师出了这么一道破题(确实破),问,输出什么。
我一看就晕,老师说这是基本知识,这不懂,大三就不要学了。郁闷阿!!!
我一看就晕,老师说这是基本知识,这不懂,大三就不要学了。郁闷阿!!!
#1
连《深度探索C++对象模型》都不肯去探索虚继承,楼主就省点心吧。
大概答案知道:vptr和vbtr
大概答案知道:vptr和vbtr
#2
程序一行注释都没有。。。。
下次提问的时候记着加点注释。。。
下次提问的时候记着加点注释。。。
#3
楼主想了解得去学一下《编译原理》了,我不是很清楚了
#4
C++对象模型
不同的编译器有不同的做法
自己写点测试代码转成汇编代码就很清楚了。
不同的编译器有不同的做法
自己写点测试代码转成汇编代码就很清楚了。
#5
我事大二的一破大学生,俺们的老师破老师出了这么一道破题(确实破),问,输出什么。
我一看就晕,老师说这是基本知识,这不懂,大三就不要学了。郁闷阿!!!
我一看就晕,老师说这是基本知识,这不懂,大三就不要学了。郁闷阿!!!