1、一个我从来没见过的场景
A作为基类
B、C均public继承自A
D同时继承自B、C
class A
{
public:
A() : number(-1) {
cout << "A()" << endl; }
A(int n) : number(n) {
cout << "A(" << n << ")" << endl; }
int get_num() {
return 10 * number; }
int number;
};
class B : public A
{
public:
B(int n) : A(n) {
cout << "B(" << n << ")" << endl; }
};
class C : public A
{
public:
C(int n) : A(n) {
cout << "C(" << n << ")" << endl; }
};
class D : public B, public C
{
public:
D() : B(1), C(2) {
cout << "D()" << endl; }
};
上述构造class的方式没有问题,你可以实例化一个D类型的对象。
不过,一个很明显的问题是:B、C中均包含了继承自A的成员,而D又同时包含了B和C,那么相当于D中有了2份A。这样4者的继承关系类似于一个菱形,所以称为菱形继承问题。
严格来说,菱形继承本身不算是问题,因为上述的代码是可以用的,只是在使用D的实例时,需要明确区分是使用父类B的成员还是使用父类C的成员。
int main