定义:
设有一个父类A类,B类和C类分别继承它,然后再有一个D类继承B类和C类。
这样就叫做菱形继承也叫钻石继承(Diamond inheritance)
上代码块:
运行结果:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<iostream>
using namespace std;
class A
{
public:
A(int x = 1)
:a(x)
{
cout << "A类构造函数----A()" << endl << endl;
}
~A()
{
cout << "A类析造函数----~A()" << endl << endl;
}
int a;//把a放在公有位置,便于类外访问
};
class B:public A
{
public:
B(int y = 2)
:b(y)
{
cout << "B类构造函数----B()" << endl << endl;
}
~B()
{
cout << "B类析构函数----~B()" << endl << endl;
}
private:
int b;
};
class C :public A
{
public:
C(int z = 3)
:c(z)
{
cout << "C类构造函数----C()" << endl << endl;
}
~C()
{
cout << "C类析构函数----~C()" << endl << endl;
}
private:
int c;
};
class D :public B,public C//先继承的先构造
{
public:
D(int z1 = 4)
:d(z1)
{
cout << "D类构造函数------D()" << endl << endl;
}
~D()
{
cout << "D类析构函数------~D()" << endl << endl;
}
private:
int d;
};
void Test()
{
D obj;
//obj.a = 10;
cout << "sizeof obj=" << sizeof(obj) << endl << endl;
}
int main()
{
Test();
system("pause");
return 0;
}
运行结果:
分析:
在创建D类对象时,先去调用了先继承的B类构造函数,在B类的构造函数中又去调用了A类的构造函数,返回D类的构造函数中后接着调用C类的构造函数,在C类的构造函数中又去调用A的构造函数。
P