C++ 受保护的基类成员是否可以通过在派生类中初始化

C++ 受保护的基类成员是否可以通过在派生类中初始化,c++,C++,为了简化RTTI,我考虑初始化一个受保护的基类成员 使用枚举的变量 class myBase { public: typedef enum class mySubType { base, type1 }; myBase() : myType( mySubType::base ) {} virtual ~myBase(); protected: mySubType myType; }; 现在,要在派生类中初始化它,我可以编写派生类吗 像这样: myDerived:

为了简化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 ) {}
myBase( mySubType _t = mySubType::base ) : myType( _t ) {}

对不起,那是不可能的。请看这里:

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

myDerived::myDerived() : myBase(), myType( mySubType::type1 ) {}
myBase( mySubType _t = mySubType::base ) : myType( _t ) {}
通过使该CTor也不接受任何参数,您已经定义了一个默认的CTor,在使用std容器时,它可以派上用场

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

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

对不起,那是不可能的。请看这里:

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

myDerived::myDerived() : myBase(), myType( mySubType::type1 ) {}
myBase( mySubType _t = mySubType::base ) : myType( _t ) {}
通过使该CTor也不接受任何参数,您已经定义了一个默认的CTor,在使用std容器时,它可以派上用场

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

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

public
不起作用时,您是否希望
protected
能起作用?您是如何想到的?我让它受到保护,所以有一点可能它会起作用。问题是,为什么你认为如果它不与
公共
一起工作,它会与
受保护的
一起工作?你的问题假设我知道它不与
公共
一起工作-我从来没有想过这个想法,因为为什么要将数据成员公开?这将违反数据封装!在
typedef枚举类mySubType{…}
中,您不需要
typedef
,它将被忽略,编译器也会产生警告。您是否希望
protected
public
不起作用时能起作用?您是如何想到的?我让它受到保护,所以有一点可能它会起作用。问题是,为什么你认为如果它不与
公共
一起工作,它会与
受保护的
一起工作?你的问题假设我知道它不与
公共
一起工作-我从来没有想过这个想法,因为为什么要将数据成员公开?这将违反数据封装!在
typedef枚举类mySubType{…}
中不需要
typedef
,它将被忽略,编译器也会产生警告。