我在C++中實現遊戲壟斷。我正在處理一個抽象超類BoardSquare
(其唯一的屬性是方形名稱),根據遊戲平方的類型(不管它是屬性,機會等),各種子類都可以處理。從超類對象數組調用子類方法
現在因爲我想表示板作爲陣列和正方形中它們的類型不同,我已經聲明的BoardSquare
指針的數組:
GameSquare** board = new GameSquare*[40];
並繼續填充取決於類型中的每個條目:
board[1] = new Property("Old Kent Road", 0);
board[2] = new CommunityChest();
board[3] = new Property("Whitechapel Road", 0);
等。
現在Property
,例如,具有特定的方法,如getPrice()
。但運行
board[1]->getPrice()
給出了錯誤
「類GameSquare」沒有名爲成員「用getPrice」
告訴我,指針仍然被視爲GameSquare。有沒有解決的辦法?可能類型化?或者更完美的實現呢?
您需要檢查實例的類型才能將其轉換爲子類型以調用基礎方法。 – Piou
@Piou你能給我一個句法的例子嗎?例如我知道'board [1]'是屬性,所以我可以運行'((Property *)board [1]) - > getPrice()'? –
另一個解決方案是在'GameSquare'類中實現一個返回-1的虛擬方法'getPrice',在'Property'中覆蓋它以返回傳遞給構造函數的價格。然後在顯示邏輯中,您只需檢查價格是否大於0即可顯示信息。 – Piou