#include<iostream>
usingnamespace std;
classBase1
{
public:
Base1()=default;
Base1(const string & str)
{
strValue = str;
}
string strValue;
};
classBase2
{
public:
Base2()=default;
Base2(const string & str)
{
strVal2nd = str;
}
string strVal2nd;
};
/**
* 一般情况下子类并不继承父类的构造函数
* 仅仅是在初始化父类的成员变量时调用父类的构造函数
* C++11允许通过下述语句来继承父类的构造函数
* using ParentClass::ParentClass;
* 这时需要注意,不要因为继承不同基类的构造函数而引起二义性
*/
class D:publicBase1,publicBase2
{
public:
usingBase1::Base1;// 从Base1继承构造函数
usingBase2::Base2;// 从Base2继承构造函数
/**
* 如果同时继承了上述两个基类的构造函数
* 则D必须实现自己的构造函数从而覆盖继承的构造函数
*/
D()=default;
D(const string & str)// 这个构造函数不能少
{
D(str, str);
}
D(const string & str1,const string & str2):Base1(str1),Base2(str2)
{
}
};
int main()
{
D d("Hello","World");
cout << d.strValue <<" "<< d.strVal2nd << endl;
return0;
}