关于c ++:重载对象成员的比较运算符

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(); }
    };
  • 使用非成员运算符(可能是friend语句)和2个参数:

    1
    2
    3
    4
    bool operator==( const Book &b1, const Book &b2 )
    {
        return b1.ISBN() == b2.ISBN();
    }

  • 注意,ISDN()应改为const

    不管怎样,您都需要返回一个bool,而不是一个Book &,它通常由赋值运算符=返回,而不是比较运算符==返回。