在继承的类构造函数中使用隐藏成员
Use hiding members in inherited 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:
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++ 中执行此操作?
我不知道
你是否需要基中的常量成员,但如果你想从派生类构造函数中指定它的值,以及可变成员的值,你可以只使用受保护的 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
不是编译时常量,它占用每个对象的空间。
使基类构造函数将该值作为默认参数。
BaseClass::BaseClass(int constant = 21)
: mutable_variable(constant)
{}
然后派生类可以提供不同的东西
DerivedClass::DerivedClass()
: BaseClass(41)
{}
基类构造函数必须被告知值,它甚至不知道派生发生。最简单的方法是更改基类 ctor 以采用具有感兴趣值的参数。
只需重写派生类构造函数中的不可变变量
#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;
}
相关文章:
- 使用函数参数隐藏成员函数
- C++继承模板类:隐藏成员变量
- pImpl、范围和隐藏数据成员
- 有选择地隐藏类成员的成员
- 共享类时如何隐藏成员功能文件
- 隐藏的成员变量不应在仅允许const访问的基类中突变,以便保留分配运算符
- 在继承的类构造函数中使用隐藏成员
- 视觉C++:即使使用关键字,参数声明也会隐藏类成员"this"
- c 中的名称隐藏式成员功能:良好实践
- C 如何使用隐藏的默认构造函数初始化成员
- 隐藏PIMPL-Objects拥有的成员的实现
- 成员模板模板参数的隐藏
- 编译器不应该对派生类中隐藏的基本结构的成员变量发出警告吗?
- 是否应隐藏所有数据成员
- 隐藏C++成员函数的原因
- VS2012 - 类界面设计:私有成员函数定位/隐藏
- 有关隐藏超类成员的问题
- 如何在不授予私有成员访问权限的情况下隐藏 C++ 中的 STL 函子结构
- 如何在dll导出的类中隐藏成员变量
- 在模板类中隐藏成员函数