我是 C++ 新手,我正在尝试编写一个简单的代码来比较名为 Comparable 的父类的子类的两个对象。我希望每个子类都有自己的方法实现,以便根据对象持有的数据来比较对象,所以我使用了 virtual 关键字:
class Comparable {
public:
virtual int compare(Comparable *other);
};
例如,我的子类 HighScoreElement 将有自己的比较实现,它将对象的分数与另一个 HighScoreElement 的分数进行比较。
这是我的子类 HighScoreElement:
class HighScoreElement: public Comparable {
public:
virtual int compare(Comparable *other);
HighScoreElement(string user_name, int user_score); // A constructor
private:
int score;
string name;
};
但是在我在 HighScoreElement 中的比较实现中,我首先尝试检查当前对象的数据是否与其他对象的数据相同。但是由于指向 other 的指针属于 Comparable 类而不是 HighScoreElement,因此我的代码中根本无法引用 other->score,即使 HighScoreElement 是 Comparable 的子类。
这是到目前为止的完整代码:
#include <iostream>
using namespace std;
class Comparable {
public:
virtual int compare(Comparable *other);
};
class HighScoreElement: public Comparable {
public:
virtual int compare(Comparable *other);
HighScoreElement(int user_score, string user_name);
private:
string name;
int score;
};
HighScoreElement::HighScoreElement(int user_score, string user_name) {
name = user_name;
score = user_score;
}
int HighScoreElement::compare(Comparable *other) {
if (this->score == other->score) { // Compiler error right here, other->score is invalid.
// Code to do the comparing if two scores are equal...
}
}
编写此代码时,我立即收到编译器错误:
if (this->score == other->score)
因为 other 没有称为 score 的数据,但它的子类 HighScoreElement 有。如何修复我的函数实现,以便我可以引用“其他”的数据?我知道我的问题可能听起来含糊不清,但任何帮助将不胜感激!