为什么重载==运算符函数表示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; //.... };
您将运算符==定义为方法成员函数,因此它有一个类型为Book*的隐式this参数。要么使用该定义,要么将该定义提升到类之外。因为它不使用任何私有成员,所以我会使用后者。您将operator==定义为方法成员函数,因此它有一个类型为Book*的隐式this参数。要么使用该定义,要么将该定义提升到类之外。因为它不使用任何私有成员,所以我会使用后者。双参数运算符重载超出了类定义的范围为什么重载==运算符函数表示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,
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是一个公共成员函数,则无需将其声明为好友