Студопедия

КАТЕГОРИИ:


Архитектура-(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.

 

<== предыдущая лекция | следующая лекция ==>
TBase и TDerived | Использование конструкторов и деструкторов
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 431; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.