наследование классов c ++ и перегрузка операторов;перегрузки операторов наследуются? - PullRequest
3 голосов
/ 12 октября 2011

Просто быстрый вопрос, если у меня есть шаблон класса:

template <typename T>
class foo {
public:
    bool operator!=(foo& other) const {
        //...
    }

}

А потом я наследую указанный класс:

template <typename T>
class bar : public foo<T> {
    //...
}

Наследование перегрузки оператора наследуется?И если нет, то как бы я реализовал его так, чтобы он это делал ... потому что в настоящее время в моем тестовом классе это вызывает ошибку:

for (bar<int> i(baz); i != bar<int>(); i++) {}

Оператор ++ реализован в классе bar, так что работает, но оператор! =, очевидно, не наследуется.Сообщение об ошибке:

error: no match for 'operator!=' in 'i != bar<int>(0u, 0u)'
note: candidate is: bool foo<T>::operator!=(foo<T>&) const [with T = int]

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

1 Ответ

6 голосов
/ 12 октября 2011

Ваше определение оператора не совсем корректно:

bool operator!=(foo& other) const {
    //...
}

должно быть

bool operator!=(const foo& other) const {
    //...
}

, так как вы пытаетесь сравнить с временным, который может быть связан только с константойссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...