c++ - 重载对象成员的比较运算符

标签 c++ operator-overloading

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

  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();
    }
    

请注意,ISDN() 应设为const

无论哪种方式,你都需要返回一个bool,而不是一个Book &,它通常由赋值运算符=返回,而不是比较运算符 ==

关于c++ - 重载对象成员的比较运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597492/

相关文章:

.net - 是否有启用 > < 和所有其他比较运算符的界面?

c++ - 如何检测 operator[] 是否适用于 Type?

c++ - 删除标准映射中的重复值

c++ - 有关在C++中初始化和调整大小的数组的问题

C++11:std::unordered_map<int, std::stack<int>> 从 map 中获取值而无需多次复制

C++ cin char 逐个符号读取

c++ - 套接字异常 : "There are no more endpoints available from the endpoint mapper"

c++ - 重载 new 和 delete C++ 以跟踪内存分配

c++ - 重载运算符 << 后打印二维数组

C++:从类内访问 operator[] 的便捷方式?