可以在派生类中初始化受保护的基类成员吗?

Can protected base class members be initialized in a derived class via

本文关键字:基类 成员 受保护 初始化 派生      更新时间:2023-10-16

为了方便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 ) {}