|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Наследование. Понятие наследования. Спецификаторы доступа к данным: private, public, protectedСпецификатор доступа protected Данные классов, с которыми мы ранее познакомились, включая переменную counter класса Counter, имели спецификатор доступа private. В предыдущей программе переменная counter имеет другой спецификатор доступа: protected. Рассмотрим его предназначение. Вспомним, что нам известно о спецификаторах доступа private и public. Из методов класса есть доступ к членам (полям и методам) класса, если они имеют любой из этих спецификаторов. Но при использовании объекта, объявленного в программе, можно получить доступ только к данным со спецификатором public (например, используя операцию точки). Предположим, что есть объект objA класса A. Метод funcA() является методом класса A. Оператор функции main() (или любой другой функции, не являющейся методом класса A) objA.funcA (); будет ошибочным, пока мы не объявим funcA() как public. Для объекта objA мы не можем использовать члены класса A, объявленные как private. Их могут использовать только методы самого класса A. Однако при использовании наследования у нас появляется еще ряд добавочных возможностей. Возникает вопрос, могут ли методы производного класса иметь доступ к членам базового класса? Другими словами, может ли operator--() класса CountDn иметь доступ к полю count класса Counter? Ответ будет таким: методы производного класса имеют доступ к членам базового класса, если они имеют спецификатор доступа public или protected. К членам, объявленным как private, доступа нет. Мы не хотим объявлять поле count как public, так как это разрешит доступ к ней из любой функции программы, уничтожив возможность сокрытия данных. Член, объявленный как protected, доступен методам своего класса и методам любо-го производного класса. При этом он не будет доступным из функций, не принадлежащих к этим классам, например из функции main(). Следует знать, что существуют и недостатки использования спецификатора доступа protected. Допустим, вы написали библиотеку классов и публично ее распространяете. Любой программист сможет получить доступ к членам классов, объявленным как protected, просто создавая производные классы. Это делает члены, объявленные как protected, значительно менее защищенными, чем объявленные как private. Чтобы избежать порчи данных, часто приходится разрешать доступ производным классам только к тем методам базового класса, которые объявлены как public. Однако использование спецификатора доступа protected упрощает программирование.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |