假设我有一个名为 book 的类:
class Book {
int i;
public:
Book(int ii)
: i(ii) {
}
int ISBN() {
return i;
}
};
我想重载 Book 类的比较运算符,这样我就可以创建一个 bool 函数,在遇到 book1==book2 时比较成员“i”。
bool is_same() {
return (book1==book2) ? true : false;
}
我该怎么做?这是我当前拥有的运算符重载函数,它给我一个“从‘bool’类型的右值对‘Book&’类型的非常量引用的无效初始化”错误。我目前在类 Book 中有我的重载函数作为公共(public)函数。
Book& operator==(const Book& b) const {
return ISBN() == b.ISBN();
}
我对运算符重载比较陌生,我筛选了很多答案,但没有一个能解决我的问题。我知道如何简单地执行 book1==book2,但只有当每个成员都具有相同的值时才会返回 true。在这种情况下,我有不止一个,但我只想在两个对象的“i”相同时返回 true。
最佳答案
你基本上有 2 个选择:
使用带有一个参数的成员运算符:
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 &
,它通常由赋值运算符=
返回,而不是比较运算符 ==
。
关于c++ - 重载对象成员的比较运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597492/