Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Защищенные члены класса






В ранних версиях языка C++ существовали только два атрибута, регулирующих уровень доступа к членам класса - public и private. В процессе все более широкого применения C++ для решения самых разнообразных задач выяснилось, что только этих двух атрибутов недостаточно, причем подавляющее большинство проблем, связанных с недостаточной гибкостью системы контроля доступа, выявились при использовании производных классов.

Например, ни пользователь класса Derived, ни даже функции-члены этого класса не могут получить доступ к членам класса Base, объявленным в нем в части private, хотя эти члены и являются одновременно членами класса Derived на правах наследования. Вначале это может показаться странным, но если подумать, то становится очевидным, что если разрешить функциям-членам производного класса обращаться к личным членам его базового класса, то вся система защиты данных теряет всякий смысл. Для решения такого рода проблем в язык C++ (начиная с версии 2.0) был добавлен еще один атрибут - protected.

Если класс А не служит базовым ни для какого другого класса, то его защищенные (protected) члены ничем не отличаются от личных (private) - доступ к ним имеют только функции-члены данного класса или привилегированные в этом класса функции. Если же класс В является производным от А, то пользователи как класса А, так и В, по-прежнему не имеют доступа к защищенным членам А, но такой доступ имеют функции-члены класса В (и, разумеется, функции, привилегированные в классе В). Еще раз подчеркнем: механизм наследования не может обеспечить доступ к личным членам базового класса. К личным (private) членам любого класса имеют доступ только функции-члены данного класса или функции, привилегированные в этом классе.

Это означает; что уровень доступа к членам класса Base для функций-членов класса Derived и просто пользователей класса Derived остался неизменным: личные члены класса Base недоступны в классе Derived, общие и защищенные члены класса Base остались соответственно общими и защищенными и в классе Derived.

Если базовый класс является личным (private) базовым классом для производного класса:

class Derived: private Base {/*... */};

то личные члены базового класса по-прежнему недоступны ни в производном классе, ни для пользователя производного класса, а защищенные и общие члены базового класса становятся личными членами производного класса.

Если базовый класс является защищенным (protected) базовым классом для производного класса:

class Derived: protected Base {/*... */};

то личные члены базового класса по-прежнему недоступны ни в производном классе, ни для пользователя производного класса, а защищенные и общие члены базового класса становятся защищенными членами производного класса.

 

Наследование Доступ в базовом классе Доступ в производном классе
public: private нет доступа
  protected protected
  public public
protected: private нет доступа
  protected protected
  public protected
private: private нет доступа
  protected private
  public private

 


м 71. Полиморфизм в ЯП

Полиморфизм -одно из основополагающих понятий ООП, оно представляет собой свойство различных объектов выполнять одно и то же действие по-своему. В ЯП сущность полиморфизма заключается в обозначении общего действия одним именем(функцией), которое используется во всей иерархии типов. Однако каждый тип в этой иерархии реализует это действие собственным способом.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.