user8075674
user8075674

Reputation:

Overloading the comparison operator for object members

Say I have a class called book:

class Book {
    int i;

    public:
        Book(int ii)
        : i(ii) {
        }

        int ISBN() {
            return i;
        }
};

I want to overload the comparison operator for the Book class, so that I can create a bool function that will compare the member "i" when it comes across book1==book2.

bool is_same() {
    return (book1==book2) ? true : false;
}

How would I go about this? This is the current operator overload function I have, it gives me an "invalid initialization of non-const reference of type 'Book&' from an rvalue of the type 'bool'" error. I currently have my overloaded function inside of the class Book as a public function.

Book& operator==(const Book& b) const {
        return ISBN() == b.ISBN();
    }

I'm relatively new to operator overloading, I have sifted through many answers but none of them resolve my issue. I understand how one could simply do book1==book2, but that would only return true if every single member was of the same value. In this case I have more than just one, but I only want to return true if "i" is the same for both objects.

Upvotes: 1

Views: 9839

Answers (1)

Slava
Slava

Reputation: 44258

You basically have 2 choices:

  1. use a member operator with one argument:

    class Book {
    ...
        bool operator==( const Book &an ) const { return ISDN() == an.ISDN(); }
    };
    
  2. use a non-member operator (and possibly a friend statement) with 2 arguments:

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

Note that ISDN() should be made const.

Either way, you need to return a bool, not a Book &, which is usually returned by the assignment operator =, not the comparison operator ==.

Upvotes: 4

Related Questions