重载对象成员

时间:2017-08-09 17:49:52

标签: c++ operator-overloading

假设我有一个名为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。

1 个答案:

答案 0 :(得分:1)

你基本上有两个选择:

  1. 使用带有一个参数的成员运算符:

    class Book {
    ...
        bool operator==( const Book &an ) const { return ISDN() == an.ISDN(); }
    };
    
  2. 使用带有2个参数的非成员运算符(可能还有friend语句):

    bool operator==( const Book &b1, const Book &b2 )
    {
        return b1.ISBN() == b2.ISBN();
    }
    
  3. 请注意ISDN()应该const

    无论哪种方式,您都需要返回bool,而不是Book &,这通常由赋值运算符=返回,而不是比较运算符==。< / p>