我最近開始學習C++(沒有事先編程知識)。我已經使用了「跳入C++」這本書,作者Alex Allain,我發現它非常有用!然而,我已經達到了類,繼承和多態的章節,雖然我明白了大部分內容,但我無法將我的頭圍繞這個問題。排序功能,需要一個接口類的指針向量
在這本書中,我要求解決以下問題:
實現定義的方法排序函數,它指針的載體接口類,可比, ,比較(可比&其他),如果對象是 ,則返回0;如果對象大於其他,則返回1;如果對象小於其他,則返回-1。創建一個實現此接口的類 ,創建幾個實例並對它們進行排序。如果您正在尋找 創作內容的一些靈感 - 嘗試一個具有名稱和 分數的HighScoreElement類,並進行排序,以便首要分數排在前面,但如果兩個分數相同,則排序 下一個按名字。
我創建可比類和高分:
class Comparable {
public:
virtual int compare(Comparable& other)=0;
};
class HighScore : public Comparable {
public:
HighScore(int, std::string);
virtual int compare(Comparable& other);
private:
int highscore;
std::string name;
};
如果我試圖覆蓋在高分繼承的功能,我不能夠進行比較,比如INT高分,與INT (比較&其他)的高分,因爲我無法訪問other.highscore。下面的例子:
int HighScore::compare(Comparable& other){
if (highscore == other.highscore) {
return 0;
}
//...
}
我想我可以在虛擬方法可能更改爲類似:
int HighScore::compare(HighScore& other){
if (highscore == other.highscore) {
return 0;
}
//...
}
因爲這將使我訪問other.highscore(我希望我會因爲工作HighScore也可以被認爲是一個可比較的,但唉,沒有這樣的運氣,我應該怎麼做,我litterally沒有線索如何繼續,我將不勝感激任何幫助,我可以得到感謝:)
如果參考文獻中的dynamic_cast失敗,則會引發異常。 '9指針類型失敗轉換的值是所需結果類型的空指針值。一個失敗的 強制轉換爲引用類型會拋出一個類型爲與匹配 std :: bad_cast(18.7.2)類型的處理函數(15.3)的異常(15.1)。' – alexrider 2013-04-23 18:50:18
@alexrider:的確,這就是我剛纔所說的這個例子。你還會如何處理比較兩種無法比較的類型? – 2013-04-23 18:51:16
哦,很抱歉誤讀了。 – alexrider 2013-04-23 18:51:49