我最近开始学习 c++(没有事先的编程知识)。我使用了 Alex Allian 的《Jumping into c++》一书,我发现它最有用!然而,我已经读到了类、继承和多态性的章节,虽然我确实理解了其中的大部分内容,但我只是无法解决这个问题。
在书中,我被要求解决以下问题:
实现一个排序函数,它接受一个指向接口类 Comparable 的指针向量,该类定义了一个方法 compare(Comparable& other),如果对象相同,则返回 0,如果对象大于其他对象,则返回 1,以及 -1如果对象小于其他对象。创建一个实现该接口的类,创建几个实例,并对它们进行排序。如果您正在寻找创建内容的灵感,请尝试使用具有名称和分数的 HighScoreElement 类,并进行排序以使最高分数在前,但如果两个分数相同,则按名称对它们进行排序。
我创建了 Comparable 和 HighScores 类:
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;
};
如果我尝试覆盖 HighScore 中的继承函数,我无法将 int highscore 与(Comparable& other)的 int highscore 进行比较,因为我无法访问 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 也可以被认为是可比的。但可惜没有这样的运气。我该怎么办,我完全不知道如何继续,我将不胜感激我能得到的任何帮助。谢谢:)