[英]Calling subclass methods from superclass object, virtual functions
我正在設計一個國際象棋游戲(C ++初學者),但是我只能檢查單個棋子類型,例如典當一次只能移動1個空格,第一次則只能移動2個空格,依此類推。
我有一個片斷類,而它的子類是pawn,king等,其中包含以下方法:
check(string position,string destination);
並返回一個布爾值,是否可以移動到目的地。
我有一個指向我通過執行定義的每個部分的指針:
pawn pawnPieces[16];
piece *pointer[16];
for (i=0;i<16;i++)
{
pointer[i]=&pawnPieces[i];
}
初步檢查后,我想從main調用上面的check函數作為測試:
cout << pointer[1]->check("B1","C1") << endl;
這給了我一個錯誤“沒有名叫'check'的成員”的錯誤,這是有道理的,但是我敢肯定會有一種方法將片斷類鏈接到典當,國王等。
我想我需要根據已閱讀的內容對虛函數做些事情,但是我不確定該如何處理。 如果有人可以提供一些建議,將不勝感激。
這種嘗試從上面的類的指針調用子類函數的方法可能存在根本缺陷,也許我需要修改設計才能實現此目標? 我仍然希望將pawn類的check方法保持在同一位置,因為我認為它可以很好地封裝它。
編輯:我在piece類中做了一個純虛函數:
virtual bool check(string positionIN,string destination)=0;
現在,當我調用上面的cout行時,出現了細分錯誤,並且不確定原因。 我假設這是因為我在使用指針?
EDIT2: 謝謝你! 我已經實現了,但是我遇到了一個小錯誤,虛擬意味着要附加到Pawn和King類嗎? 根據我的理解,我認為虛擬標簽僅在基類上使用。
EDIT3:我了解,我使用虛擬標記標記了pawn和king類中的check函數,並對其進行了編譯。
現在我通過調用對象本身遇到了分段錯誤
pawnPieces[1].check("B1","C1")
並通過調用對象的指針
pointer[1]->check("B1","C1")
從主要,我不確定為什么。
EDIT4:現在一切正常,我正在從main調用它進行測試,但是當我從程序中調用它時,一切正常,謝謝大家!
您試圖做的正是virtual
方法的含義。
class piece
{
public:
virtual bool check(string position, string destination) = 0;
};
class pawn : public piece
{
public:
virtual bool check(string position, string destination)
{
return ...;
}
};
class king : public piece
{
public:
virtual bool check(string position, string destination)
{
return ...;
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.