我對C++非常陌生,非常感謝任何和所有的幫助。我有這個任務可以玩類和繼承。我的理解是,我可以在基類中編寫一個虛擬函數,它被繼承類中的相同名稱的函數覆蓋。當我調用任何繼承類時,這種方法很好,但是當我將它們插入一個寫入基類的函數中時,即使它接收的對象來自繼承類,它也會從繼承類調用初始化器,但其他只能從基類中運行。這裏是我的代碼縮短版本:C++如何確保何時使用虛擬繼承,它稱之爲繼承而不是基函數
基類:
#ifndef PLAYER_CPP
#define PLAYER_CPP
class Player
{
protected:
string playerThrow;
public:
//function that sets player throw
void virtual setMove();
string performMove() {return(playerThrow);}
};
#endif
繼承類:
class Avalanche: virtual public Player
{
public:
Avalanche();
//set specific move for class
void setMove()
{
//always plays rock
playerThrow = "rock";
}
};
//initializer, inherit from player, set new name
Avalanche::Avalanche() : Player()
{
//initialize name string
string newName;
//set name
newName = "Avalanche Player";
//sets name in player class
name = newName;
}
如何我試圖使用它:
class Tournament
{
public:
Tournament();
Player bout(Player, Player);
Player Tournament::bout (Player p1, Player p2)
{
p1.setMove();
p2.setMove();
return p1;
}
};
什麼這樣做的結果是將這一舉措設置爲無效,而不是「搖擺」。
預先感謝任何正確方向的指針。這個讓我難住。
-Victoria
參見:http://stackoverflow.com/questions/274626/what-is-the-slicing -problem-in-c – Mankarse 2012-03-23 12:17:22
爲什麼使用虛擬測試?我看不到虛擬繼承的任何需要 – softghost 2012-03-23 12:49:18
'bout'的定義應該在類之外。符合編譯器會拒絕這個實現。 – 2012-03-23 15:36:41