关于Virtual Base Class的几点说明
先看以下的几个程序的输出的多少
1:
#include <iostream>
using namespace std;
void main()
{
class a{};
class b:public virtual a{};
class c:public virtual a{};
class d:public b,public c{};
cout<<sizeof(a)<<endl<<sizeof(b)<<endl<<sizeof(c)<<endl<<sizeof(d)<<endl;
}
2:
#include <iostream>
using namespace std;
void main()
{
class a{int i;};
class b:public virtual a{int j;};
class c:public virtual a{int k;};
class d:public b,public c{};
cout<<sizeof(a)<<endl<<sizeof(b)<<endl<<sizeof(c)<<endl<<sizeof(d)<<endl;
}
3:
#include <iostream>
using namespace std;
void main()
{
class a{};
class b:public a{};
class c:public a{};
class d:public b,public c{};
cout<<sizeof(a)<<endl<<sizeof(b)<<endl<<sizeof(c)<<endl<<sizeof(d)<<endl;
}
4:
#include <iostream>
using namespace std;
void main()
{
class a{int i;};
class b:public a{int j;};
class c:public a{int k;};
class d:public b,public c{};
cout<<sizeof(a)<<endl<<sizeof(b)<<endl<<sizeof(c)<<endl<<sizeof(d)<<endl;
}
具体的结果得更具具体的编译器而定
在VC上运行得出来的结果分别是
1:1 4 4 8
2:4 12 12 20
3:1 1 1 1
4:4 8 8 16
在原始一点的C++编译器上运行的结果又会不一样
1:1 8 8 12
2:4 12 12 20
3:1 1 1 1
4:4 8 8 16
出现上面的结果主要是因为:
不想写了 ,想知道请留言 我会一一解答