104.虚基类以及为什么要用虚基类

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

代码示例
 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 }
原文地址:https://www.cnblogs.com/xiaochi/p/8603549.html