2016-08-23 2 views
0

私はチェスの試合をしており、クラスをレイアウトしています。ベースのPieceクラスを持ち、ルック、ビショップ、ナイト、ポーン、キング、クイーンクラスを分離して継承することは理にかなっています。コンストラクタが必要とする唯一のパラメータは、基本クラスのメンバとなるブール値の「owner」値です。プレーヤの場合はtrue、AIの場合はfalseです。私は、オブジェクトが次のようにインスタンス化されるべきだと思う:C++で派生クラスに対して同じコンストラクタを記述する必要がありますか?

Rook(bool owner) { 
    this->owner = owner; 
} 

の全体の原則に違反しているようだ:

//create a Rook owned by the player 
Rook exampleRook = new Rook(true); 
//create a Knight owned by the AI 
Knight exampleKnight = new Knight(false); 

私がに各派生クラスをこのような何かをしなければならないように思えます継承:コードをベースクラスに1回書いてから継承します。基本クラスにsetOwner()関数を記述する必要があるかもしれませんが、別の関数(これは再び呼び出すことができます)ではなく、コンストラクターで所有者を設定する方が理にかなっているようです。

+4

に通過基底クラスのコンストラクタの初期化リスト

Piece(bool _owner) : owner(_owner) {} 

でメンバーの初期化を置くことができます。あなたはそれがC++であると確信していますか?存在する場合は、「継承コンストラクタ」を検索します。 – juanchopanza

+0

1.継承コンストラクタ、2.メンバ初期化子リスト – LogicStuff

答えて

4

あなたはその後、派生クラスでちょうどあなたのコードは、Javaのように見える基底クラスのコンストラクタ

Rook(bool owner) : Piece(owner) {} 
関連する問題