<h1 class="postTitle"><span style="font-size: 18pt;"> C++中的类继承之单继承&多继承&菱形继承
<div class="postBody">
<div id="cnblogs_post_body">
单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承。这种关系比较简单是一对一的关系:
多继承是指 一个子类有两个或以上直接父类时称这个继承关系为多继承。这种继承方式使一个子类可以继承多个父类的特性。多继承可以看作是单继承的扩展。具有多个基类,与每个基类之间的关系仍可看作是一个单继承。多继承下派生类的构造函数与单继承下派生类构造函数相似,它必须同时负责该派生类所有基类构造函数的调用。同时,派生类的参数个数必须包含完成所有基类初始化所需的参数个数。在子类的内存中它们是按照声明定义的顺序存放的,下面的截图将清晰看到。
class Base{public:Base() {cout << "B()" << endl;}int b1;};class Derive : public Base{public:Derive() {cout << "D()" << endl;}int d1; };int main(){Test();getchar();return 0;}
多继承的内存空间:
class Base{public:Base() {cout << "B()" << endl;}int b1;};class C{public:C() {cout << "C()" << endl;}int c;};class Derive : public Base,public C{public:Derive() {cout << "D()" << endl;}int d1; };
菱形继承内存中数据分布:
class A{public:A() {cout << "A()" << endl;}int a;};class Base:public A{public:Base() {cout << "B()" << endl;}int b1;};class C: public A{public:C() {cout << "C()" << endl;}int c;};class Derive : public Base,public C{public:Derive() {cout << "D()" << endl;}int d1; };
什么是对象模型
有两个概念可以解释C++对象模型:
1、语言中直接支持面向对象程序设计的部分。2、对于各种支持的底层实现机制。
还有另外一个方法解决这个问题,我们要用到一种新的继承方法:虚继承--解决菱形继承的二义性和数据冗余的问题。看下面这段代码:

1 class Base 2 { 3 public: 4 Base() { 5 cout << "B()" << endl; 6 } 7 int b1; 8 }; 9 class Derive : virtual public Base 10 { 11 public: 12 Derive() { 13 cout << "D()" << endl; 14 } 15 int d1; 16 }; 17 void Test() 18 { 19 Derive tmp; 20 tmp.d1 = 1; 21 tmp.b1 = 2; 23 } 24 int main() 25 { 26 Test(); 27 getchar(); 28 return 0; 29 }