在继承的类构造函数中,我想使用一个类常量成员,它隐藏基类构造函数中的基类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 ++中执行此操作?
答案 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;
}