当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。
代码示例
1 为什么要用虚基类的原因
2 #include <iostream>
3 using namespace std;
4 class A
5 {
6 public:
7 int a;
8 public:
9 A()
10 {
11 cout << "A()" << endl;
12 }
13 ~A()
14 {
15 cout << "~A()" << endl;
16 }
17 };
18
19 class B1 : public A
20 {
21
22 };
23
24 class B2 :public A
25 {
26
27 };
28
29 class C :public B1, public B2
30 {
31
32 };
33
34 void main()
35 {
36 C c1;
37 //c1.a = 1;
38 //特定基类初始化
39 c1.B1::A::a = 10;
40 c1.B2::A::a = 100;
41 cin.get();
42 }
- 虚继承以及虚基类
1 #include <iostream>
2 using namespace std;
3
4 //虚基类
5 class A
6 {
7 public:
8 int a;
9 public:
10 A()
11 {
12 cout << "A()" << endl;
13 }
14 ~A()
15 {
16 cout << "~A()" << endl;
17 }
18 };
19
20 //虚继承节约内存,避免直接保护
21 class B1 :virtual public A
22 {
23
24 };
25
26 class B2 :virtual public A
27 {
28
29 };
30
31 class C :public B1, public B2
32 {
33
34 };
35
36 void main()
37 {
38 C c1;
39 c1.a = 10;
40 c1.B1::A::a = 3;
41 cout << c1.B1::A::a << endl;
42 cout << c1.B2::A::a << endl;
43 cin.get();
44 }