C++ 受保护的基类成员是否可以通过在派生类中初始化
为了简化RTTI,我考虑初始化一个受保护的基类成员 使用枚举的变量C++ 受保护的基类成员是否可以通过在派生类中初始化,c++,C++,为了简化RTTI,我考虑初始化一个受保护的基类成员 使用枚举的变量 class myBase { public: typedef enum class mySubType { base, type1 }; myBase() : myType( mySubType::base ) {} virtual ~myBase(); protected: mySubType myType; }; 现在,要在派生类中初始化它,我可以编写派生类吗 像这样: myDerived:
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
,它将被忽略,编译器也会产生警告。