假设我有一个名为book的课程:
class Book {
int i;
public:
Book(int ii)
: i(ii) {
}
int ISBN() {
return i;
}
};
我想重载Book类的比较运算符,这样我就可以创建一个bool函数来比较成员“i”遇到book1 == book2。
bool is_same() {
return (book1==book2) ? true : false;
}
我该怎么做?这是我所拥有的当前运算符重载函数,它给了我“类型'Book&'的非const引用的无效初始化'来自'bool'类型的右值“错误。我目前在类Book中将重载函数作为公共函数。
Book& operator==(const Book& b) const {
return ISBN() == b.ISBN();
}
我对运营商重载相对较新,我已经筛选了很多答案,但没有一个能解决我的问题。我理解一个人怎么可以简单地做book1 == book2,但只有每个成员具有相同的价值时才会返回true。在这种情况下,我不仅仅有一个,但如果两个对象的“i”相同,我只想返回true。
答案 0 :(得分:1)
你基本上有两个选择:
使用带有一个参数的成员运算符:
class Book {
...
bool operator==( const Book &an ) const { return ISDN() == an.ISDN(); }
};
使用带有2个参数的非成员运算符(可能还有friend
语句):
bool operator==( const Book &b1, const Book &b2 )
{
return b1.ISBN() == b2.ISBN();
}
请注意ISDN()
应该const
。
无论哪种方式,您都需要返回bool
,而不是Book &
,这通常由赋值运算符=
返回,而不是比较运算符==
。< / p>