Есть необходимость переопределить видимость метода наследуемого от базового, или запретить его переопределение.
Я пробовал переопределить так:
class some_super_class
{
...
protected:
virtual void some_protected_method();
...
}
class some_child_class : protected some_super_class
{
private:
some_super_class::some_protected_method();
}
Но по каким то причинам таким образом я не могу получать доступ к методам, членам класса находящимся внутри класса some_child_class только внутри метода some_protected_method();.
Как правильно переопределить видимость у наследуемого объекта?
Для того, чтобы запретить переопределение виртуальной функции в производном классе можно использовать контекстно-зависимое слово final:
struct B {
virtual void f() final;
};
struct D : B {
void f() override; // Ошибка из-за попытки переопределения final функции
};
Видимость функции тоже можно поменять в производном классе, однако из-за виртуальности функций к ней всё равно можно будет обратиться через указатель/ссылку на базовый класс:
struct B {
virtual void f() {};
};
struct D : B {
private: // делаем приватной
void f() override {};
};
int main()
{
D* d = new D;
B* b = d;
d->f(); // ошибка из-за приватного доступа
b->f(); // OK. Вызовется именно D::f()
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости