c++ - 有条件地调用基本构造函数

标签 c++ inheritance constructor

目前,我有一个具有两个不同构造函数的基类:

class Base {
public:
   Base(std::string filname){...}
   Base(int a, int b) {...}
};

和基类的派生类。我想做的是选择在派生类的构造函数中调用哪个构造函数,而不是在初始化列表中。像这样:

class Derived : public Base {
public:
    Derived() {
        if( /* exists("myFile") */ )
            this->Base("myFile");
        else
            this->Base(1,2);
    }
}

是否可以这样做?或者因为基类在派生类之前初始化,所以调用基类构造函数的唯一方法是在初始化列表中?

谢谢

最佳答案

调用哪个基本构造函数的选择发生在函数体之前,并且没有办法像那样在运行时更改它。但是,您也许可以靠近。如果基类也有一个移动构造函数,或者你可以添加一个,你可以使用它:

class Derived : public Base {
public:
    Derived()
        : Base{ exists("myFile") ? Base{"myFile"} : Base{1, 2} } {
    }
}

这将调用exists("myFile");如果返回 true,它将使用第一个构造函数构造一个临时的 Base,如果返回 false,它将构造一个临时的 Base 使用第二个构造函数。无论哪种方式,它都会使用这个临时对象构造实际 基础子对象。

关于c++ - 有条件地调用基本构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50820198/

相关文章:

c++ - 是否可以从基类调用派生类函数

java.lang.ClassException : A cannot be cast into B 异常

java - 在调用 super 之前在构造函数中转换变量?

c++ - 读取超出 istringstream 字符串末尾的内容。

c++ - MinGW - 链接 SFML 静态库时 ld.exe 崩溃

c++ - ANN 库中的前向声明

c++ - 在 Debug模式下运行时缓冲区溢出

C++ 在 if-else 内部声明派生类对象并在外部使用它

c++ - c2512 错误 : no appropriate default constructor available

c++ - 如何参数化构造函数的参数个数?