Мы обсуждали похожую тему на Java здесь . В отличие от Java, C ++ позволяет предоставлять более ограниченный доступ к методам производного класса. Например, следующая программа компилируется нормально.
|
В приведенной выше программе, если мы изменим main () на следующее, получим ошибку компилятора, потому что fun () является закрытой в производном классе.
|
А как насчет программы ниже?
|
Выход:
Derived::fun(int x) called
В приведенной выше программе частная функция Derived :: fun (int) вызывается через указатель базового класса, программа работает нормально, потому что fun () является общедоступной в базовом классе. Спецификаторы доступа проверяются во время компиляции, а fun () общедоступна в базовом классе. Во время выполнения вызывается только функция, соответствующая указанному объекту, и спецификатор доступа не проверяется. Таким образом, частная функция производного класса вызывается через указатель базового класса.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Можем ли мы получить доступ к закрытым данным членов класса, не используя функцию член или друга?
- Производные типы данных в C ++
- Виртуальные функции в производных классах
- Ловля базовых и производных классов как исключения
- Публично наследовать базовый класс, но некоторые публичные методы делаются как частные
- Разница между основными типами данных и производными типами данных
- Модификаторы доступа в C ++
- Итераторы с произвольным доступом в C ++
- Как преобразовать класс в другой тип класса в C ++?
- Как привязать к номеру порта менее 1024 с не root-доступом?
- Можем ли мы получить доступ к глобальной переменной, если есть локальная переменная с таким же именем?
- std :: any Класс в C ++
- класс std :: string в C ++
- Класс массива в C ++
- класс std :: valarray в C ++
0.00 (0%) 0 votes