Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Защищенные члены класса
В ранних версиях языка 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 {/*... */}; то личные члены базового класса по-прежнему недоступны ни в производном классе, ни для пользователя производного класса, а защищенные и общие члены базового класса становятся защищенными членами производного класса.
м 71. Полиморфизм в ЯП Полиморфизм -одно из основополагающих понятий ООП, оно представляет собой свойство различных объектов выполнять одно и то же действие по-своему. В ЯП сущность полиморфизма заключается в обозначении общего действия одним именем(функцией), которое используется во всей иерархии типов. Однако каждый тип в этой иерархии реализует это действие собственным способом.
|