C++11允许派生类通过using声明,直接使用基类的构造函数,从而省去不必要的构造函数透传:
#include <iostream>
using namespace std;
class A{
public:
A(int a = 10):m_a(a){} //基类的默认构造函数
void printA()
{
cout<<"m_a="<<m_a<<" ";
}
private:
int m_a;
};
class B : public A{
using A::A; //继承类通过using声明使用基类的构造函数
public:
B(int a, int bi):A(a), m_bi(bi){} //继承类自己的构造函数
B(double bd) : m_bd(bd){} //继承类自己的构造函数
void printB()
{
printA();
cout<<"m_bi="<<m_bi<<" ";
cout<<"m_bd="<<m_bd<<endl;
}
private:
int m_bi = 100;
double m_bd = 1000.0;
};
int main()
{
B b1; //派生类虽然没有声明默认构造函数,但是基类声明了默认构造函数,因此可以通过基类构造函数进行构造
b1.printB(); //输出:m_a=10 m_bi=100 m_bd=1000
B b2(20, 200); //通过派生类的构造函数进行初构造
b2.pr