C++学习记录-面向对象-虚继承:解决菱形继承问题

当发生菱形继承时,即有两个子类都是继承自一个基类,再有一个类继承自上述两个子类时,会发生基类的成员被继承多次,不仅浪费存储空间;还存在二义性问题

**示例:**son1和son2都继承自base类,而gson继承自son1和son2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class base {
public:
int a;
};

class son1 :public base {

};

class son2 :public base {

};

class gson :public son1, public son2 {

};

此时对gson的成员进行复制:

1
2
gson s;
s.a = 8;

会发生:1>D:\Work\C艹练习\练手\Project1\Project1\源.cpp(24,6): error C2385: 对“a”的访问不明确

此时通过查看gson类的结构,看到gson类中有两份base类的成员:

通过虚继承则可以解决上述问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class base {
public:
int a;
};

class son1 :virtual public base {

};//虚继承

class son2 :virtual public base {

};//虚继承

class gson :public son1, public son2 {

};

查看gson类的结构: