在继承的类构造函数中使用隐藏成员

时间:2018-01-11 08:26:39

标签: c++ inheritance constructor

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

#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&#39;构造函数使用自己的constant_variable值,而我希望它使用DerivedClass&#39; constant_variable

如何在c ++中执行此操作?

4 个答案:

答案 0 :(得分:4)

我不知道你是否需要基类中的常量成员,但如果你想从派生类构造函数以及可变成员的值中指定它的值,你可以只需使用受保护的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不是编译时常量,它占用每个对象的空间。

答案 1 :(得分:0)

必须告诉基类构造函数的值,它甚至不知道派生。最简单的方法是更改​​基类ctor以获取具有感兴趣值的参数。

答案 2 :(得分:0)

使基类构造函数将值作为默认参数。

BaseClass::BaseClass(int constant = 21)
  : mutable_variable(constant)
{}

然后派生类可以提供不同的东西

DerivedClass::DerivedClass()
 : BaseClass(41)
{}

答案 3 :(得分:0)

Just override the non mutable variable in the derived class constructor

#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:

    public:
        DerivedClass()
        {
            mutable_variable = 42;
        }
};

int main () {
    DerivedClass dc;
    std::cout << dc.mutable_variable << std::endl; // returns 42
    return 0;
}