This question already has answers here:
How can I initialize base class member variables in derived class constructor?
                                
                                    (8个答案)
                                
                        
                                3年前关闭。
            
                    
为了简化RTTI,我考虑了初始化受保护的基类成员
使用枚举变量。

class myBase
{
public:
    typedef enum class mySubType { base, type1 };
    myBase() : myType( mySubType::base ) {}
    virtual ~myBase();
protected:
    mySubType myType;
};


现在,要在派生类中初始化它,我可以编写派生类吗
CTor像这样:

myDerived::myDerived() : myBase(), myType( mySubType::type1 ) {}


???

最佳答案

抱歉,这是不可能的。看到这里:C++ error initializing base class data member in the derived class member initialization list

基本上,您必须重写基本CTor声明才能接受该枚举,如下所示:

myBase( mySubType _t = mySubType::base ) : myType( _t ) {}


通过使CTor也不接受任何参数,您已经定义了默认的CTor,在使用std容器时可以使用它。

最后以这种方式在派生类中使用它:

myDerived::myDerived() : myBase( mySubType::type1 ) {}

关于c++ - 可以通过[duplicate]在派生类中初始化 protected 基类成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38115450/

10-11 22:22
查看更多