私はモノポリーをC++で実装しています。私は抽象的なスーパークラスBoardSquare
(その唯一のプロパティは四角形の名前です)を扱っています。ゲームの正方形のタイプに応じて様々なサブクラスがあります(プロパティ、チャンスなど)。スーパークラスオブジェクトの配列からサブクラスメソッドを呼び出す
ボードアレイと四角は、その種類が異なるように、私はBoardSquare
ポインタの配列宣言していますように
board[1] = new Property("Old Kent Road", 0);
board[2] = new CommunityChest();
board[3] = new Property("Whitechapel Road", 0);
と:
GameSquare** board = new GameSquare*[40];
や種類に応じて、各項目を移入し続けています。
Property
は、例えば、getPrice()
のような特定の方法を持っています。しかし
board[1]->getPrice()
がエラーに
「クラスGameSquare」を与え実行すると、ポインタはまだGameSquareとして扱われていることを私に伝えます
「getPrice」という名前のメンバーを持っていません。これを回避する方法はありますか?おそらくタイプキャストですか?それともより洗練された実装ですか?
インスタンスの型をチェックして、基本型を呼び出すためにサブ型にキャストできるようにする必要があります。 – Piou
@Piou構文の例を教えてください。例えば、私は 'board [1]'がプロパティであることを知っているので、 '((Property *)board [1]) - > getPrice()'を実行できますか? –
もう一つの解決策は 'GameSquare'クラスに' getPrice'という仮想メソッドを実装して-1を返し、 'Property'でそれを上書きしてコンストラクタに渡された価格を返します。あなたのディスプレイロジックでは、価格が> 0であることを確認して情報を表示します。 – Piou