FootWork
@FootWork

Как правильно скрывать методы базового класса (C++ наследование)?

Собственно, читаю про наследование в ООП:
c91598452de747539fe8d5f593d7bf02.PNG
Поясните этот кусочек текста? Я сам поэкспериментировал с кодом на VS. Замещается в любом случае, что с const , что без const..
  • Вопрос задан
  • 1211 просмотров
Решения вопроса 1
@MiiNiPaa
Замещается в любом случае, что с const , что без const..
Уверены что не скрывается? Пробовали через указатель на базовый класс вызвать функцию? Или объявить её с override чтобы компилятор поймал ошибку.

Пример скрытия/перегрузки coliru.stacked-crooked.com/a/b948b28d158c70d9
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
EvgenijDv
@EvgenijDv
C/C++ programmer
А причем здесь const ? Вам в сторону private и public смотреть надо :)
Ответ написан
Nipheris
@Nipheris Куратор тега C++
MiiNiPaa уже подкинул хорошую идею проверить через указатель на базовый класс, действительно ли метод override-ится (я буду орининальные термины использовать, т.к. конкретный перевод, к сожалению, зависит от книги). Если будет по-прежнему вызываться метод базового класса, то у вас скрытие (hide). Используйте ключевое слово override, чтобы убедиться, что метод корректно попадает в таблицу виртуальных вызовов. Методы с const и без const-а действительно различны, это хорошо видно на примере оператора индексации (operator[]) - его часто определяют в двух вариантах - константном и неконстантном.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы