- 为什么要用虚基类
当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。
代码示例
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 }