钻石继承的构造函数问题

来源:互联网 发布:seo关键词布局 编辑:程序博客网 时间:2024/04/27 08:42

见代码:

#include <iostream>
using namespace std;
class A
{
public:
 A(int value):m_val(value){cout<<"A object is constructed"<<endl;}
 void print()const;
protected:
 int m_val;
};
void A::print()const
{
 cout<<"A print"<<endl;
 cout<<m_val<<endl;
}
class B:virtual public A
{
public:
 B():A(3){cout<<"B object is constructed"<<endl;}
 B(int value):A(value){cout<<"B object is constructed"<<endl;}
};
class C:virtual public A
{
public:
 C():A(2){cout<<"C object is constructed"<<endl;}
 C(int value):A(value){cout<<"C object is constructed"<<endl;}
};
class D:public B,public C
{
public:
 D():A(1),B(),C(){cout<<"D objecct is constructed"<<endl;} //有A类构造函数来构造A类部分
};
int main()
{
 D obj;
 obj.print();
 return 0;
}

结果是:

 

原创粉丝点击