msc*_*msc 2 c++ inheritance constructor c++11
我正在尝试用C++ 实践继承构造函数.我已经编译并在gcc中运行以下程序,它运行正常.
#include<iostream>
using namespace std;
class Base1
{
public:
Base1()
{
cout<<"Base1 Default Constructor\n";
}
Base1(int i)
{
cout<<"Base1 parametrized Constructor\n";
}
};
class Base2
{
public:
Base2()
{
cout<<"Base2 Default Constructor\n";
}
Base2(const string& s)
{
cout<<"Base2 parametrized Constructor\n";
}
};
class Derived :public Base1, public Base2
{
public:
using Base1::Base1;
using Base2::Base2;
};
int main()
{
Derived d1(3); // OK
Derived d2("hello"); // OK
}
Run Code Online (Sandbox Code Playgroud)
输出:
Base1 parametrized Constructor
Base2 Default Constructor
Base1 Default Constructor
Base2 parametrized Constructor
Run Code Online (Sandbox Code Playgroud)
但是,我想知道,为什么默认构造函数被调用?
正在调用默认构造函数,因为Derived继承自Base1和Base2.在构造Derived对象时,需要构造这两个基础.所以,当你这样做
Derived d1(3);
Run Code Online (Sandbox Code Playgroud)
你打电话Base1(int i).现在您需要构造Base2零件,因为您没有指定方式,编译器默认构造它.同样的事情发生在
Derived d2("hello");
Run Code Online (Sandbox Code Playgroud)
由于您未指定如何在构造函数中构造Base1零件,因此编译器默认为您构造零件.然后Base2(const string& s)调用构造Base2部分.
基本上你拥有的是什么
class Derived :public Base1, public Base2
{
public:
Derived(int n) : Base1(n), Base2() {}
Derived(const std::string& str) : Base1(), Base2(str) {}
};
Run Code Online (Sandbox Code Playgroud)