重载比较运算符

Overloading comparison operator

本文关键字:运算符 比较 重载      更新时间:2023-10-16

我对C++相当陌生,并试图重载<类中的运算符。

在我的头文件中,我有:

friend bool operator<(const Tweet& a, const Tweet& b);

在我的类文件中:

inline bool Tweet::operator<(const Tweet& a, const Tweet& b) {
    return (a.getID() < b.getID());
}

目前我收到一个错误‘bool Tweet::operator<(const Tweet&, const Tweet&)’ must take exactly one argument

删除Tweet::会将错误更改为未定义的引用,删除第二个参数会将错误改为"必须正好接受两个参数"

PS-我试着遵循操作员过载中的适当部分以及一些相关问题,但后来我只得到了各种不同的错误。

好吧,您要声明一个独立的函数为友元,然后定义一个类成员函数作为比较。这并不完全正确。

如果您定义了具有两个参数的比较运算符,则必须将其声明为静态:

static bool Tweet::operator<(const Tweet& a, const Tweet& b) {
    return (a.getID() < b.getID());
}

通过这种方式,a < b被解释为Tweet::operator<(a, b);

如果没有static,则会隐式地得到3个参数:*thisab

或者,您可以定义一个实例运算符,采用一个参数并将其与当前实例进行比较:

bool Tweet::operator<(const Tweet& b) {
    return (getID() < b.getID());
}

通过这种方式,a < b被解释为a.operator<(b);

或者,您可以定义一个独立的函数(这是您实际可能需要friend的地方):

bool operator<(const Tweet& a, const Tweet& b) {
    return (a.getID() < b.getID());
}

这样a < b就被解释为operator<(a, b);

无论哪种方式都很好。