В предыдущем разделе мы видели метод определения производных классов с использованием публичного наследования. На самом деле здесь есть три метода: публичное наследование , частное наследование и защищенное наследование .
Основное различие между разными методами наследования заключается в изменении прав доступа членов с разными правами доступа базового класса в производном классе. Представлено по одному ниже.
1. Публичное наследование:
В режиме публичного наследования его характеристики следующие:
(1) Открытые члены базового класса по-прежнему являются открытыми членами производного класса. Конечно, в производном классе можно получить доступ как к функциям-членам, так и к объектам производного класса.
(2) Члены производного класса или объекты производного класса не могут получить доступ к закрытым членам базового класса.
(3) Защищенные члены базового класса по-прежнему являются защищенными типами в производном классе, и к ним можно получить доступ через функции-члены производного класса, но к объектам производного класса доступ невозможен.
2. Частное наследование:
В случае частного наследования права доступа трех членов открытого типа, частного типа и защищенного типа следующие:
(1) Открытые и защищенные типы базового класса после поглощения частным наследованием производного класса становятся частными типами производного класса, то есть к ним можно получить доступ в функциях-членах класса, и они не могут быть доступны. быть доступным вне класса.
(2) К закрытым членам базового класса нельзя получить доступ в производном классе, как внутри, так и вне класса.
Мы видим, что если это частное производное, частные члены базового класса больше не могут использоваться в производном классе или даже в производном подклассе и не имеют никакого значения, поэтому такой вид использования встречается относительно редко.
3. Защитите наследование:
Наследование защищенного типа имеет следующие характеристики:
(1) Открытые члены и члены защищенного типа базового класса являются защищенными членами производного класса.
(2) К частным членам базового класса нельзя получить прямой доступ в производном классе.
Видно, что функции-члены производного класса могут получать доступ к открытым и защищенным членам базового класса, но к ним нельзя получить доступ вне класса через объект производного класса. Аналогично, к закрытым членам базового класса нельзя получить доступ через функции-члены производного класса или через объекты класса.
Далее в качестве примера по-прежнему используется программный код часов и будильника для экспериментов с различными типами проблем доступа, возникающими из-за разных разрешений в базовом классе. Для общедоступных типов их можно вызывать в методах-членах производных классов или вне класса. Компиляция выполняется без ошибок следующим образом:
Но для частных членов мы пытаемся добавить строку кода, см. строку 41. В функции-члене производного класса присваивается переменная H, полученная из базового класса, и во время компиляции выдается сообщение об ошибке. См. красное поле и подсказку ниже:
Вы можете увидеть сообщение об ошибке «H — частный тип».
Для защищенных типов мы пытаемся определить переменную защищенного типа w в базовом классе и пытаемся назначить и использовать ее в публично унаследованном методе производного класса. Вы можете увидеть ситуацию на рисунке ниже, который полностью доступен. Как показано ниже:
При частном наследовании доступ к членам открытых типов осуществляется за пределами класса:
Вы можете самостоятельно поэкспериментировать, чтобы проверить доступ различных типов членов при публичном наследовании.
После изучения и экспериментов мы можем подвести итог следующим образом:
1. Частные члены базового класса не могут быть доступны функциям-членам внутри производного класса или за его пределами, независимо от производных разрешений.
2. Частное наследование. Независимо от исходного типа базового класса, к нему нельзя получить доступ через функции-члены вне производного класса.
3. Права доступа членов, поглощенных производным классом из базового класса, являются наименьшими из прав доступа в базовом классе и производных прав на момент создания.
И на основе комбинации производных разрешений, разрешений, определенных в базовом классе, а также разного времени доступа внутри производного класса и вне класса, отображается следующая таблица:
общественное наследование | защищенное наследование | частное наследство | ||||
Посетите местоположение | в классе | Вне класса | в классе | Вне класса | в классе | Вне класса |
представители общественности | Может | Может | Может | Не мочь | Может | Не мочь |
защищать членов | Может | Не мочь | Может | Не мочь | Может | Не мочь |
частный член | Не мочь | Не мочь | Не мочь | Не мочь | Не мочь | Не мочь |