我有一个名为“学生”的班级,其中一个变量是一个包含学生姓名的字符串。
我想重载“>”运算符,所以它测试看第一个学生的名字是否比第二个学生的名字长,我希望它返回一个bool(真或假)值。
bool operator>(Students student1, Students student2)
{ //code to compare the two strings}
我一直收到错误消息,说我的参数太多了。
答案 0 :(得分:1)
你的参数太多了。
当重载操作时,第一个隐式参数是当前对象,也称为this
。
所以你想要:
class Students
{
/*Param #1 is THIS*/
bool operator>(Students& student2)
{
return (this->name.Length > student2.name.Length);
}
}
用法如下:
void MyFunc()
{
Students alpha("Eric");
Students beta("Sampson");
if (alpha > beta) // effectively calls alpha.OperatorGreater(alpha, beta)
}
答案 1 :(得分:0)
将比较运算符声明为非成员或成员函数。请参阅以下示例,这两个示例都可以正常工作。
非会员功能版本:
using namespace std;
struct s {
double a;
s(double aa): a(aa) {};
};
bool operator< (const s &s1, const s &s2) {
return s1.a < s2.a;
}
int main() {
s s1(1);
s s2(2);
bool b = s1 < s2;
}
会员功能版本:
using namespace std;
struct s {
double a;
s(double aa): a(aa) {};
bool operator< (const s &s2) { return a < s2.a ;}
};
int main() {
s s1(1);
s s2(2);
bool b = s1 < s2;
}