重载的运算符

时间:2014-05-06 17:52:26

标签: c++ operator-overloading

我有一个名为“学生”的班级,其中一个变量是一个包含学生姓名的字符串。

我想重载“>”运算符,所以它测试看第一个学生的名字是否比第二个学生的名字长,我希望它返回一个bool(真或假)值。

bool operator>(Students student1, Students student2)
{ //code to compare the two strings}

我一直收到错误消息,说我的参数太多了。

2 个答案:

答案 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;
}