2017-12-12 23 views
0

さまざまな種類のケーキを請求書に挿入し、いくつかの派生クラスを使用するプログラムを作成しようとしています。私は抽象親クラスのいくつかのデータメンバーを初期化するために派生クラスのコンストラクタを使いたいと思います。データメンバを非公開にして、派生クラス内で基本クラスのコンストラクタを呼び出して初期化する方法がありますか?例:コンストラクタの体内に派生クラスのコンストラクタの内部で基本クラスのコンストラクタを呼び出すC++

class Cake: 
public: 
    Cake(string flavor, string frosting) { 
     cakeType = flavor; 
     frostingType = frosting; 
    } 
private: 
    string cakeType; 
    string frostingType; 
}; 

class LayerCake: public Cake { 
public: 
    LayerCake(string flavor, string frosting, int layers, int 
    quantity) { 
     numLayers = layers; 
     cakeQuantity = quantity; 
     Cake(flavor, frosting); 
private: 
    int numLayers; 
    int cakeQuantity; 
}; 

答えて

1

Cake(flavor, frosting);だけ派生クラスの基底クラスのサブオブジェクトとは何の関係も持た​​ない、一時的なCakeを構築します。

希望するものはmember initializer listです。

class LayerCake: public Cake { 
public: 
    LayerCake(string flavor, string frosting, int layers, int 
    quantity) : Cake(flavor, frosting) { 
//   ~~~~~~~~~~~~~~~~~~~~~~~~ 
     numLayers = layers; 
     cakeQuantity = quantity; 
    } 
    ... 
}; 
+0

ヘッダーファイルを使用している場合は、この構文を宣言と実装の両方で使用するのか、それとも実装のみですか? – Jake

+1

@Jake実装だけ。 – songyuanyao

+0

ありがとう! – Jake

関連する問題