• 虚基类的用法


     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 class A
     6 {
     7 private:
     8     int a;
     9 public:
    10     A(int x):a(x){}
    11     void show() const
    12     {
    13         cout<<"a: "<<a<<endl;
    14     }
    15     ~A(){}
    16 };
    17 class B:virtual public A    //定义虚基类的用法
    18 {
    19 private:
    20     int b;
    21 public:
    22     B(int x,int y):A(x),b(y){}//子类构造函数必须使用初始化列表(初始化列表在时间性能上比函数体内赋值更有优势,注意这里我用的词是赋值而不是初始化。)
    23     void show() const       //show函数将父类的show()覆盖掉,const可以限制当前对象的内容不可改变
    24     {
    25         cout<<"b: "<<b<<endl;
    26     }
    27     ~B(){}
    28 };
    29 class C:virtual public A
    30 {
    31 private:
    32     int c;
    33 public:
    34     C(int x,int z):A(x),c(z){}
    35     void show() const
    36     {
    37         cout<<"c: "<<c<<endl;
    38     }
    39     ~C(){}
    40 };
    41 class D:public B, public C
    42 {
    43 private:
    44     int d;
    45 public:
    46     D(int x,int y,int z,int h):A(x),B(x,y),C(x,z),d(h){}//首先注意构造函数的写法,直接或间接继承虚基类的所有派生类都必须在构造函数的初始化列表里列出对虚基类的初始化,但是,只有最远派生类的构造函数才调用虚基类的构造函数,也就是说,虚基类的成员(a)只有一份拷贝
    47     void show() const
    48     {
    49         B::show();
    50         C::show();
    51         cout<<"d: "<<d<<endl;
    52     }
    53     ~D(){}
    54 };
    55 
    56 int main()
    57 {
    58     D f(1,2,3,4);
    59     f.show();
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    python
    spice-vdagent
    no ia32-libs
    git conflict
    wget mirror
    docker !veth
    libprotobuff8.so not found
    angular 列表渲染机制
    Java测试技巧
    react组件生命周期
  • 原文地址:https://www.cnblogs.com/jiu0821/p/4156545.html
Copyright © 2020-2023  润新知