Перегрузка функции == - PullRequest
       22

Перегрузка функции ==

7 голосов
/ 18 февраля 2012

В настоящее время я работаю над созданием перегруженной функции для оператора ==. Я создаю файл hpp для своего связанного списка, и я не могу заставить этот оператор работать в файле hpp.

У меня сейчас есть это:

template <typename T_>
class sq_list 
{

bool operator == ( sq_list & lhs, sq_list & rhs) 
{
    return *lhs == *rhs;
};

reference operator * ()     {
        return _c;
    };

};
}

Я получаю около 10 ошибок, но они в значительной степени повторяются как ошибки:

C2804: двоичный оператор '==' имеет слишком много параметров
C2333: 'sq_list :: operator ==': ошибка в объявлении функции; Пропуск функции тела
C2143: синтаксическая ошибка: отсутствует ';' до '*'
C4430: отсутствует указатель типа - предполагается int. Примечание: C ++ не поддерживает default-int

Я пытался что-то изменить, но постоянно получаю те же ошибки, что и выше

Любые советы или помощь по этому вопросу с благодарностью.

Ответы [ 3 ]

7 голосов
/ 18 февраля 2012

Оператор-член имеет только один аргумент, который является другим объектом. Первый объект - это сам экземпляр:

template <typename T_>
class sq_list 
{
    bool operator == (sq_list & rhs) const // don't forget "const"!!
    {
        return *this == *rhs;  // doesn't actually work!
    }
};

Это определение на самом деле не имеет смысла, поскольку оно просто вызывает себя рекурсивно. Вместо этого он должен вызывать некоторую операцию-член, такую ​​как return this->impl == rhs.impl;.

0 голосов
/ 18 февраля 2012

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

Операторы сравнения очень просты.Сначала определите ==, используя сигнатуру функции следующим образом:

  bool MyClass::operator==(const MyClass &other) const {
    ...  // Compare the values, and return a bool result.
  }

КАК сравнивать объекты MyClass - все ваше.

0 голосов
/ 18 февраля 2012

Вы объявляете перегрузку == как часть определения класса, поскольку экземпляры метода получат.Таким образом, первый запрашиваемый вами параметр, lhs, уже неявный: помните, что внутри методов экземпляра у вас есть доступ к this.

class myClass {
    bool operator== (myClass& other) {
        // Returns whether this equals other
    }
}

Метод operator == () как частьПод классом следует понимать «этот объект знает, как сравнивать себя с другими».

Вы можете перегрузить оператор == () вне класса, чтобы получить два аргумента, сравниваемые оба объекта, если это имеет больше смысла длявы.Смотрите здесь: http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

...