在继承的类构造函数中,我想使用一个类常量成员,该成员从基类构造函数中隐藏一个基类:

#include <string>
#include <iostream>

class BaseClass {
    private:
    const int constant_variable { 21 };

    public:
    int mutable_variable;
    BaseClass(): mutable_variable(constant_variable) {};
};

class DerivedClass: public BaseClass {
    private:
    const int constant_variable { 42 };

    public:
    using BaseClass::BaseClass;
};

int main () {
    DerivedClass dc;
    std::cout << dc.mutable_variable << std::endl; // 21, but I want it to be 42
    return 0;
}

例如,在示例代码中,BaseClass的构造函数使用自己的constant_variable值,而我希望它使用DerivedClass的constant_variable

如何在C++中做到这一点?

最佳答案

我不知道您是否需要在基数中使用常量成员,但是如果您想从派生类构造函数以及可变成员中指定其值,则可以使用 protected c'tor:

class BaseClass {
    private:
    const int constant_variable { 21 };

    protected:
    BaseClass(int init) : constant_variable{init}, mutable_variable{init}
    {}

    public:
    int mutable_variable;
    BaseClass(): mutable_variable(constant_variable) {}
};

class DerivedClass: public BaseClass {
    public:
    DerivedClass() : BaseClass(42) {}
};

您应该知道constant_variable不是编译时间常数,它占用每个对象中的空间。

关于c++ - 在继承的类构造函数中使用隐藏成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48202624/

10-14 15:14
查看更多