2016-06-30 6 views
1

経由で初期化することができます。簡単な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) {} 

???

+0

期待していますか? – juanchopanza

+1

あなたはそのアイデアをどうやって得ますか?私はそれを保護された、それは働くだろうわずかなチャンスが存在するようにした。そうでなければ私はそれを非公開にしていただろう。 – pi84

+0

なぜ、 'public'で動作しないと、どうにか' protected'で動作すると思いますか? – juanchopanza

答えて

0

申し訳ありませんが、それはできません。ここを参照してください: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コンテナで作業するときに便利になる可能性があります。最後に

そして、あなたの派生クラスでそのようにそれを使用する:あなたはpublic`がないときに `` protected`はそれを動作させるということ

myDerived::myDerived() : myBase(mySubType::type1) {} 
関連する問題