mar*_*afm 7 c++ inheritance constructor
目前,我有一个基于两个不同构造函数的类:
class Base {
public:
Base(std::string filname){...}
Base(int a, int b) {...}
};
Run Code Online (Sandbox Code Playgroud)
和Base类的派生类.我想要做的是选择派生类的构造函数内部的构造函数调用,而不是在初始化程序列表中.像这样的东西:
class Derived : public Base {
public:
Derived() {
if( /* exists("myFile") */ )
this->Base("myFile");
else
this->Base(1,2);
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以这样做?或者因为基类是在派生类之前初始化的,调用基本构造函数的唯一方法是在初始化列表中?
谢谢
调用哪个基础构造函数的选择发生在函数体之前,并且无法在运行时更改它.但是,您可能会接近.如果基类也有移动构造函数,或者你可以添加一个,你可以使用:
class Derived : public Base {
public:
Derived()
: Base{ exists("myFile") ? Base{"myFile"} : Base{1, 2} } {
}
}
Run Code Online (Sandbox Code Playgroud)
这会打电话exists("myFile"); 如果返回true,它将Base使用第一个构造函数构造一个临时的,如果它返回false,它将Base使用第二个构造函数构造一个临时构造函数.无论哪种方式,它将使用此临时构造实际的基础子对象.