C ++, как вызвать функцию друга родителя? - PullRequest
2 голосов
/ 01 сентября 2011

Существует Базовый класс и Производный класс. Производное наследование базы. В базовом классе реализована функция дружественного оператора bool == (const Base & lhs, const Base & rhs) const; Я реализую класс Derive, который также должен реализовать оператор bool == (const Derive & lhs, const Derive & rhs) const; Теперь моя проблема в том, что я не знаю, как вызвать функцию оператора == родителей в моей функции оператора ==. Оператор == для дозы базового класса не относится к базе, поэтому я не могу просто использовать Base :: operator ==. Спасибо.

1 Ответ

5 голосов
/ 01 сентября 2011

Свяжите ссылки на подобъекты Base и сравните их с обычным синтаксисом оператора.Пример:

class Base { /*...*/ };

bool operator==(const Base&, const Base&);

class Derive : public Base
{
    friend bool operator==(const Derive&, const Derive&);
private:
    int mem_;
};

bool operator==(const Derive& d1, const Derive& d2)
{
    return static_cast<const Base&>(d1) == static_cast<const Base&>(d2)
           && d1.mem_ == d2.mem_;
}

Предупреждение: Такая настройка молча срезается, если вы случайно сравниваете Base с Derive.Если базовый класс должен быть сопоставим, возможно, стоит установить механизм виртуального сравнения.

...