继承与虚继承中内存结构的问题
下面的两段程序代码,麻烦解释下其内存的结构,具体看代码中的问号处。
#include <iostream>
using namespace std;
class A
{
char k[3];
public:
virtual void aa(){};
};
class B :public A
{
char j[3];
public:
virtual void bb(){};
};
class C: public B
{
char i[3];
public:
virtual void cc(){};
};
int main(int argc,char *agrv[])
{
A a;
B b;
C c;
cout<<"sizeof(A)"<<sizeof(a)<<endl;//为什么是8
cout<<"sizeof(B)"<<sizeof(b)<<endl;//为什么是12
cout<<"sizeof(C)"<<sizeof(c)<<endl;//为什么是16
return 0;
}
第二段代码
#include <iostream>
using namespace std;
class A
{
char k[3];
public:
virtual void aa(){};
};
class B :public virtual A
{
char j[3];
public:
virtual void bb(){};
};
class C: public virtual B
{
char i[3];
public:
virtual void cc(){};
};
int main(int argc,char *agrv[])
{
A a;
B b;
C c;
cout<<"sizeof(A)"<<sizeof(a)<<endl;//为什么是8
cout<<"sizeof(B)"<<sizeof(b)<<endl;//为什么是20
cout<<"sizeof(C)"<<sizeof(c)<<endl;//为什么是32
return 0;
}
#include <iostream>
using namespace std;
class A
{
char k[3];
public:
virtual void aa(){};
};
class B :public A
{
char j[3];
public:
virtual void bb(){};
};
class C: public B
{
char i[3];
public:
virtual void cc(){};
};
int main(int argc,char *agrv[])
{
A a;
B b;
C c;
cout<<"sizeof(A)"<<sizeof(a)<<endl;//为什么是8
cout<<"sizeof(B)"<<sizeof(b)<<endl;//为什么是12
cout<<"sizeof(C)"<<sizeof(c)<<endl;//为什么是16
return 0;
}
第二段代码
#include <iostream>
using namespace std;
class A
{
char k[3];
public:
virtual void aa(){};
};
class B :public virtual A
{
char j[3];
public:
virtual void bb(){};
};
class C: public virtual B
{
char i[3];
public:
virtual void cc(){};
};
int main(int argc,char *agrv[])
{
A a;
B b;
C c;
cout<<"sizeof(A)"<<sizeof(a)<<endl;//为什么是8
cout<<"sizeof(B)"<<sizeof(b)<<endl;//为什么是20
cout<<"sizeof(C)"<<sizeof(c)<<endl;//为什么是32
return 0;
}
...全文
相关推荐
C++虚继承原理[项目代码]
在文章中,作者详细分析了虚继承的工作原理,并通过实际代码示例来阐述其内存布局与普通继承的差异。
虚函数和虚继承及其在内存中布局
(总大小16字节),但是虚函数表的结构有所不同:- `A::$vftable@`- `&A_meta`- `0`- `&A::f1`- `&A::f2`#### 二、虚继承的理解与内存布局虚继承主要用于解决
8.虚继承的布局1
虚继承的主要目的是解决基类的多重实例化问题,使得内存布局更加合理,提高代码的复用性和效率。在标题“8.虚继承的布局1”中,我们关注的重点是虚继承下的对象布局以及虚函数表的结构。
c++继承中的内存布局 - 开源中国社区.pdf
#### 五、虚继承下的内存布局虚继承是一种特殊的继承方式,用于解决多重继承中的钻石问题。在虚继承中,派生类通过指向基类的指针来引用基类数据成员,而不是直接继承基类数据成员。
cpp代码-C++:类03__菱形继承
虚继承确保了`DerivedFinal`类中只有一个`Base`实例,从而避免了数据成员的重复。**菱形继承与多态性:**菱形继承对于实现多态性特别有用,尤其是在设计面向对象的系统中。


