重载比较运算符
Overloading comparison operator
我对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个参数:*this
、a
和b
。
或者,您可以定义一个实例运算符,采用一个参数并将其与当前实例进行比较:
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);
。
无论哪种方式都很好。
相关文章:
- 为什么比较运算符如此快速
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 关于 std::min, std::max 中的比较运算符的混淆
- 三向比较运算符成员与非成员实现
- 标准::可选枚举的比较运算符
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- C++分数混合比较运算符错误
- <<运算符优先级与字符串比较
- 不能将重载比较运算符与 Catch 测试一起使用
- 重构使用动态强制转换的 std::set 的比较运算符
- ">"运算符和"<"运算符如何进行字符串比较?
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- C++使用关系运算符比较字符串
- 为什么使用 and 运算符比较 if 语句中的 2 个对象会抛出错误,而使用 2 if 语句则不会
- 使用关系运算符比较指针意味着什么
- 运算符<比较多个字段
- 运算符==比较两个不同的类
- 使用==运算符比较字符串到0
- 使用'if'语句和"<<"时的结果错误,'>>'运算符比较 3 个整数