Невозможно использовать защищенный оператор == в производном классе

#include <iostream>

class Foo {
public:
int m_foo;
Foo(int a_foo) : m_foo(a_foo) {}

protected:
bool operator==(const Foo& a) const {
std::cout << "Foo: " << m_foo << " == " << a.m_foo << '\n';
return m_foo == a.m_foo;
}
};

class Bar : public Foo {
public:
int m_bar;
Bar(int a_foo, int a_bar) :
Foo(a_foo),
m_bar(a_bar)
{}

bool operator==(const Bar& a) const {
std::cout << "Bar: " << m_foo << ", " << m_bar << " == " << a.m_foo << ", " << a.m_bar << '\n';
return (const Foo&)*this == (const Foo&)a &&
m_bar             == a.m_bar;
}
};

int main() {
Bar a(1, 1);
Bar b(1, 2);
Bar c(2, 2);

std::cout << (a == a) << '\n';
std::cout << (a == b) << '\n';
std::cout << (a == c) << '\n';

return 0;
}

В моем реальном коде Foo это класс, который может быть создан, но не должен использоваться operator== и поэтому я сделал это protected, Я получаю ошибку компилятора от этого:

foo.cpp: In member function ‘bool Bar::operator==(const Bar&) const’:
foo.cpp:9:7: error: ‘bool Foo::operator==(const Foo&) const’ is protected
bool operator==(const Foo& a) const {
^
foo.cpp:25:43: error: within this context
return (const Foo&)*this == (const Foo&)a &&
^

Почему это не разрешено? Разве производный класс не сможет использовать protected метод?

4

Решение

Я не могу ответить почему (пока), но этот альтернативный синтаксис делает то, что вы хотите:

return Foo::operator==(a) &&  (m_bar == a.m_bar);
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector