КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Замечание. Открытые члены в базовом
Открытые члены в базовом и производном классе
правила, когда будете решать, делать ли член класса закрытым, защищенным или открытым. · Закрытые члены доступны только в классе, в котором они объявлены · Защищенные члены доступны членам их собственного класса и всем членам производных классов. · Открытые члены доступны членам их собственного класса, членам производных классов и всем остальным пользователям этого класса. В главе 15 объясняется, как друзья класса могут обойти эти правила.
Можно иметь столько закрытых, защищенных и открытых секций в классе, сколько потребуется, и эти секции могут следовать в произвольном порядке. (Конечно, если встраиваемая функция-член ссылается на другой член, он должен быть объявлен до реализации встраиваемой функции-члена).
ПРИМЕР базового класса
class TAnyClass { private: int A; // доступен только членам TAnyClass // т.е.fa(), fb() и fc() void fa(void); // “ ” // внешние оп-ры не могут вызывать fa() //защищенные protected: int B; // Доступен TAnyClass и // членам производных классов void fв(void); // “ ” // внешние оп-ры не могут вызывать fв() public: int C; // Доступен любим членам и всем, //кто его использует void fc(void); // “ ” };
Член А закрыт в TAnyClass и доступен только другим членам этого класса, т.е. функции-члены fa(), fb() и fc() имеют непосредственный доступ к А. Конечно, внешние операторы и даже функции-члены производных классов не могут ссылается на А непосредственно. Вдобавок, функция-член fa(), может вызваться только другими членами TAnyClass. Внешние операторы не могут вызывать функцию-член fa(), являющуюся исключительной “частой собственностью” TAnyClass. Член В и функция-член fb() защищены и доступны другим членам TAnyClass, и любым членам производных классов. Конечно, вне класса защищенные члены имеют закрытый статус. Внешние оператор не могут иметь доступ к классу В или функции-члену fb(). Член С и функция-член fc() открыты и свободны для прямого доступа всем членам TAnyClass, членов производных классов и оператором вне класса. Открытые члены класса всегда доступные для всех, кто использует этот класс. Спецификаторы доступа private, protected, и public могут также предшествовать имени базового класса в объявлении производного класса. ПРИМЕР производного класса, о снованного на TAnyClass
class TDerived: public TAnyClass { // Новые данные-члены, //функции-члены, конструкторы etc. }; Спецификатор public можно заменить на private или protected. По умолчанию члены наследуемого класса закрыты.
Влияние спецификатора на статус наследуемых членов. · Члены открытого базового класса в производном классе сохраняют свои спецификации доступа public, protected и private. · Открытые члены защищенного базового класса становятся защищенными в производном классе. Защищенные и закрытые члены сохраняют свои первоначальные спецификации доступа. · Все члены закрытого базового класса становятся закрытыми в производном классе независимо от первоначальной спецификации доступа этих членов.
случай, когда базовый класс объявлен закрытыми для производного класса, наиболее существенно влияет на наследуемые члены.
class TBase { protected: int x; public: int y; … }; производный класс class TDerived: private TBase { // Обратите внимание на статус //“private” public: void f (void); // f() имеет доступ к членам x и y // статус членов x и y изменился // на private, //т.к. TBase объявлен закрытым // базовым классом }; функция-член f() имеет доступ к членам x и y, наследованным из класса TBase. Однако, поскольку TBase объявлен закрытым базовым классом для класса TDerived, статус членов x и y изменился на private.
В наследовании class TDescendant: public TDerived { public: void g(void); //g() не имеет доступа к членам x и y }; функция-член g() не имеет доступа к членам x и y несмотря на то, что первоначально эти члены имели статус protected и public.
Дата добавления: 2014-01-11; Просмотров: 431; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |