摘 要:本文主要探索了在虚拟继承和简单多重继承情形下,类内的成员数据,成员函数,基类等在派生类中的结构。
关键词:虚拟继承;多重继承;层次结构;内存布局 对于编写C++的程序员,一定多少使用过它语法中最基本也是最大的特点:继承与派生。那么一个类的产生会带来多大的空间开销,派生类和基类在数据、函数的内存结构上又有什么特点? 让我们从最简单的开始,一步一步展开我们的继承探索之旅。 一、空基类空成员虚拟继承 我们看如下代码: class A{}; class B:public virtual A{}; class C:public virtual A{}; class D:public B,public C{}; 图1-1 各个类层次结构 可以明显的看到,上述各个类都是空类,所有语句只表达了继承关系而不具备任何数据处理功能,没有成员数据,没有成员函数。那么对他们使用Sizeof 的结果应该都是0。 但是结果是这样的吗? 结果如下: 为什么会出现这样的结果呢? 其实空基类隐藏一个带有编号性质的1字节Char用与区分该类生成的不同实体: A a1,a2; if(&a1= =&a2) cout<<""the same address.""<