Рассмотрим этот код, который пытается вызвать оператор сравнения базового класса из оператора производного класса:
struct Base
{
protected:
int _a;
bool operator == ( const Base& other ) const
{
return (_a == other._a);
}
};
struct Derived : public Base
{
bool operator == ( const Derived& other ) const
{
return static_cast<Base>(*this) == static_cast<Base>(other);
}
};
int main()
{
Derived b1, b2;
if( b1 == b2 )
;
}
Сбой:
main.cpp: 25:61: ошибка: 'bool Base :: operator == (const Base &)' защищен в этом контексте return static_cast (* this) == static_cast (other);
Я не могу понять, почемуЯ не могу получить доступ к этому оператору из производного класса.
Я провел поиск, прежде чем задавать вопрос, и обнаружил этот другой вопрос , который выглядит аналогично.Однако:
- В другом вопросе OP хочет сравнить (производный класс) с объектом базового класса, когда мне нужно сравнение объектов того же типа.
- Iне понимаю данное объяснение.
- Случай несколько отличается: в другом вопросе принятый ответ предлагает провести сравнение базовых членов в производном классе.Что если у меня есть для сравнения в базовом классе?
По пункту 2 позвольте мне уточнить: принятый ответ от @Barry предполагает, что в качествеобъект преобразуется в базовый класс ... поэтому он не может получить доступ к членам базового класса!Это почему ?Для меня это неясно.
Может ли кто-нибудь дать четкое объяснение ситуации здесь (и, возможно, прийти с решением ...)?
Если вы чувствуете, что где-то может быть какой-то другой вопросчто проясняет ситуацию, пожалуйста, ссылку на нее (я не могу найти).