Есть необходимость переопределить видимость метода наследуемого от базового, или запретить его переопределение.
Я пробовал переопределить так:
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()
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Примерно продумал синтаксис, но выводит число неправильноАлгоритм такой: число оставить без его целой части, далее умножать на 10 до тех пор,...
Я только недавно решил установить себе впервые линуксПроблема в следующем, при сборке выдает вот это :
Вот такую задачку "нарезали", не знаю с какой стороны подойтиМожет кто поможет