Overloading the comparison operator for object members
假设我有一个叫做书的班级:
1 2 3 4 5 6 7 8 9 10 11 12 | class Book { int i; public: Book(int ii) : i(ii) { } int ISBN() { return i; } }; |
我想重载Book类的比较运算符,这样我就可以创建一个bool函数,当成员"i"遇到book1==book2时,它将对其进行比较。
1 2 3 | bool is_same() { return (book1==book2) ? true : false; } |
号
我该怎么办?这是我拥有的当前运算符重载函数,它为我提供了"从类型"bool"错误的右值对类型"book&;"的非常量引用的无效初始化"。我目前在类书中作为公共函数有我的重载函数。
1 2 3 | Book& operator==(const Book& b) const { return ISBN() == b.ISBN(); } |
我对运算符重载比较陌生,我已经筛选了许多答案,但没有一个能解决我的问题。我理解一个人如何简单地做book1==book2,但只有当每个成员都具有相同的值时才会返回true。在这种情况下,我有不止一个对象,但是如果两个对象的"i"相同,我只想返回true。
你基本上有两种选择:
将成员运算符与一个参数一起使用:
1 2 3 4 | class Book { ... bool operator==( const Book &an ) const { return ISDN() == an.ISDN(); } }; |
使用非成员运算符(可能是
1 2 3 4 | bool operator==( const Book &b1, const Book &b2 ) { return b1.ISBN() == b2.ISBN(); } |
号
注意,
不管怎样,您都需要返回一个