信管14:多重继承-虚基类示例代码?

来源:互联网 发布:snap.svg.js 编辑:程序博客网 时间:2024/05/18 22:44

     多重继承容易产生二义性,除显式指明调用会产生二义性的成员外,解决方法还可以使用虚基类。分析下在代码,分析几个类的继承情况,和虚基类的机制。

#include<iostream>#include<string>using namespace std;class B{ int a; public:  B(int sa)  { a=sa;    cout<<"Constructing B"<<endl;  }  void print_B()  {  cout<<"base class:a="<<a<<endl;   }};class B1:virtual public B{  int b;  public:   B1(int sa,int sb):B(sa)   { b=sb;     cout<<"Constructing B1"<<endl;   }   void print_B1()  {cout<<"B1 class:b="<<b<<endl;   }};class B2:virtual public B{  int c;  public:   B2(int sa,int sc):B(sa)    {c=sc;     cout<<"Constructing B2"<<endl;     }   void print_B2()  {  cout<<"B2 class:c="<<c<<endl;   }};class D:public B1,public B2 {  int d; public:  D(int sa,int sb,int sc,int sd):B(sa),B1(sa,sb),B2(sa,sc)   { d=sd;      cout<<"Constructing d"<<endl;   }   void print_D()  {  cout<<"D class:d="<<d<<endl;   }}; int main() { D obj(2,4,6,8);    cout<<"**********************"<<endl;   obj.print_D();   obj.print_B();   obj.print_B1();   obj.print_B2();      system("pause");  return 0;  }


0 0
原创粉丝点击