首页 > 代码库 > 虚基类的用法
虚基类的用法
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() const12 {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 A30 {31 private:32 int c;33 public:34 C(int x,int z):A(x),c(z){}35 void show() const36 {37 cout<<"c: "<<c<<endl;38 }39 ~C(){}40 };41 class D:public B, public C42 {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() const48 {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 }
虚基类的用法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。