Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么重载==运算符函数表示2个参数太多 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; //.... };_C++_Operator Overloading - Fatal编程技术网

为什么重载==运算符函数表示2个参数太多 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个参数太多 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; //.... };,c++,operator-overloading,C++,Operator Overloading,您将运算符==定义为方法成员函数,因此它有一个类型为Book*的隐式this参数。要么使用该定义,要么将该定义提升到类之外。因为它不使用任何私有成员,所以我会使用后者。您将operator==定义为方法成员函数,因此它有一个类型为Book*的隐式this参数。要么使用该定义,要么将该定义提升到类之外。因为它不使用任何私有成员,所以我会使用后者。双参数运算符重载超出了类定义的范围 class Book { ... }; bool operator==(const Book& a,

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

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

双参数运算符重载超出了类定义的范围

class Book
{
    ...
};

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

双参数运算符重载超出了类定义的范围

class Book
{
    ...
};

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

你是说我必须使用this指针,比如this.Return\u ISBN==a.Return\u ISBN。。。如果我在类外定义函数,我需要将其声明为友元还是与类内的任何其他成员函数一样?@user2904033仅当它需要访问非公共数据成员或成员函数时,才应将其声明为友元。在这种情况下,如果Book::Return\u ISBN是一个公共成员函数,则无需将其声明为Friends,因此您是说我必须使用this指针,例如this.Return\u ISBN==a.Return\u ISBN。。。如果我在类外定义函数,我需要将其声明为友元还是与类内的任何其他成员函数一样?@user2904033仅当它需要访问非公共数据成员或成员函数时,才应将其声明为友元。在本例中,如果Book::Return\u ISBN是一个公共成员函数,则无需将其声明为好友