可以在派生类中初始化受保护的基类成员吗?
Can protected base class members be initialized in a derived class via
为了方便RTTI,我考虑初始化一个受保护的基类成员
class myBase
{
public:
typedef enum class mySubType { base, type1 };
myBase() : myType( mySubType::base ) {}
virtual ~myBase();
protected:
mySubType myType;
};
现在,要在派生类中初始化它,可以编写派生类如下所示:
myDerived::myDerived() : myBase(), myType( mySubType::type1 ) {}
? ?
对不起,这是不可能的。c++在派生类成员初始化列表中初始化基类数据成员时出错
基本上你必须重写基CTor声明来接受enum,像这样:
myBase( mySubType _t = mySubType::base ) : myType( _t ) {}
通过使CTor也不接受参数,您已经定义了一个默认的CTor,在使用std容器时可以派上用场。
最后在你的派生类中使用
myDerived::myDerived() : myBase( mySubType::type1 ) {}
相关文章:
- 派生类看不到基类成员
- C++11: 如何访问派生类中的基类成员?
- Qml 未收到基类成员变量的更新值
- 指向从指针派生类成员函数的指针,指向基类成员函数
- 初始化基类成员 (c++) 的首选方法
- 访问多级复合关系中的基类成员
- 允许从特定派生类访问基类成员
- 在派生类的成员联合中包含继承的基类成员
- 由派生类设置的 constexpr 基类成员
- 从派生类调用的抽象基类成员函数
- 从抽象基类访问另一个基类成员
- C++派生类访问基类成员
- 不能引用派生模板类中的基类成员
- C2694 在析构函数上,当基类成员的析构函数具有非空 noexcept 说明符和主体时
- 在Visual Studio 2017中,通过扩展每个参数包来呼叫基类成员失败
- 在C 中访问带有不正确的下属的基类成员
- C++将基类成员链接到派生类成员
- 从基类成员函数返回派生类的实例
- 从指针到基类成员的模板推导
- 是否可以从派生类中排除基类成员?