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

标签 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;
    //....


  };

最佳答案

您将operator== 定义为一个方法(成员函数),因此它有一个Book* 类型的隐式this 参数。要么使用它,要么将定义提升到类之外。因为它不使用任何私有(private)成员,所以我会使用后者。

关于c++ - 为什么重载的 == 运算符函数说 2 个参数太多了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20052886/

相关文章:

c++ - 双参数构造函数的用户定义文字

c++ - C/C++ 枚举和 char * 数组

从 C 函数返回的指针数组的 C++ 包装器

c++ - Thrift 或 Protocol buffer 作为跨语言序列化解决方案?

c++ - 打印多 map map 的方法?

c++11 - 带有映射的结构的 ostream 运算符重载

c++ - 如何正确返回带有成员变量的重载运算符++?

c++ - 重载赋值运算符不适用于链接 C++

c++ - 如何在 C++ 中打印方法指针的地址?

c++ - 没有信号处理程序的 POSIX 计时器的用途是什么?