为什么重载的==运算符函数说2个参数太多

时间:2013-11-18 16:34:23

标签: c++ operator-overloading

MS Visual c ++ 2010编译器告诉我运算符==有太多参数,但是 如果我只放一个,那就让它过去吧。这里发生了什么?我从Stroustrup的书中得到了这个功能,我很确定他知道如何在c ++中重载操作符。

class Book
{
    public:

    Book(){}

    Book(long long isbn,string  ttl, string  athr, int cpyrght_dt)
    :ISBN(isbn), title(ttl), author(athr), copyright_date(cpyrght_dt) {}
   //...
    const long long & Return_ISBN  () const {return ISBN;           }

    bool operator==(const Book& a, const Book & b)
    {
            return a.Return_ISBN()==b.Return_ISBN();
        }

  private:

    long long  ISBN;
    //....


  };

2 个答案:

答案 0 :(得分:12)

您将operator==定义为方法(成员函数),因此它具有类型为this的隐式Book*参数。要么使用它,要么提升课外的定义。由于它不使用任何私人成员,我会做后者。

答案 1 :(得分:4)

双参数运算符重载超出了类定义。

class Book
{
    ...
};

bool operator==(const Book& a, const Book & b)
{
    return a.Return_ISBN()==b.Return_ISBN();
}