Программирование >>  Расширенная версия языка c++ 

1 ... 66 67 68 [ 69 ] 70 71 72 ... 227


Примеры

1. В этой программе проиллюстрирован доступ к открытым, закрытым и защищенным членам класса:

#include <iostream> - - -Т

using namespace std;

class samp (

члены класса, закрытые по умолчанию int а;

protected: тоже закрытые члены класса samp

int b; public;

int с; -. .

samp (int n, in m) { a n; b m; } in a() { return a; }

int getb() { return b; } -V .c.

); ... . V

samp ob(10, 20};

с1азз имя класса { ~

закрытые члеии protected: необязательный спецификатор

защищенные члени public:

откршпыв члвгш

Когда базовый класс наследуется производным классом как открытый (public), защищенный член базового класса становится защищенным членом производного класса. Когда базовый класс наследуется как закрытый то защищенный член базового класса становится закрытым членом производного класса.

Базовый класс может также наследоваться производным классом как защищенный (protected). В этом случае открытые и защищенные члены базового класса становятся защищенными членами производного класса. (Естественно, что закрытые члены базового класса остаются закрытыми, и они не доступны для производного класса.)

Спецификатор доступа protected можно также использовать со структурами.



ob.b = 99; Обка! Переменная щндена и поэтому закрыта оЬ.с = 30; Правильно! Переменная с

является открыт членом класса samp , .,

cou eta [) << ;

cou etbO ob.c \n;

return 0;

Как вы могл тить, в1деленная в комментарий строка содержит инструкцию, недопустимую в функции niaiii(), поскольку переменная b является защищенной и таким образом по-прежнему закрытой для класса samp.

2. В следующей программа мзано, что происходит, если защищенные члены класса наследуются как открытые:

♦include <iostream> Л- ,.

using namespace std;

, irti.. - - .

class base { :

protected: закрытые члены класса base,

in b; но дл модного класса они доступны public:

voi b(int n, inn: { a = n; b = m; }

class derived: public base { int ,

public : , - 54,-

void n) ( с = n; }

эта функция имее туп к переменн а и b класса base-void ahowabc О {

cou с \п;

derived ob;

/* Переменные а и b здесь недоступны, поскольку являются закрытыми членами классов base и derived

ob.setabU, 2) ; i .

ob.setc (3);

ob. showabc (); г., .=!:.

return 0;



int mainO

1 . .. -

derived ob;

ОБКА: теперь функция setab{)

является защищенным членом класса base

функция здесь недоступна

ob.setc (3); .

ob.showabc();

return 0;

Как указано в комментариях, поскольку класс base наследуется как защищенный, его открытые и защищенные элементы становятся защищенными членами производного класса derived и следовательно внутри функции main() они недоступны.

Поскольку переменные а и Ь в классе base защищены и наследуются производным классом derived как открытые члены, они доступны для использования функциями - членами класса derived. Однако вне двух этих классов они в полной мере закрыты и недоступны.

3. Как упоминалось ранее, если базовый класс наследуется как защищенный, открытые и защищенные члены базового ьсласса становятся защищенными членами производного класса. Например, в слегка измененной версии программы из предыдущего примера класс base наследуется не как открытый, а

как защищенный:

Эта программа компилироваться не будет .

ttinclude <iostream> using namespace std;

class base { - . i

protected: закрытые члены класса base,

int но для производного класса они доступны

public:

void setab(int n, int m} { a = n; b = m; }

class derived: protected base ( класс base наследуется

как защенный int с;

public:

void { с = n; }

эта функция имеет доступ к переменн а и b класса base void showabc () {

cout а b c \n ; : H---- ] - - :



1 ... 66 67 68 [ 69 ] 70 71 72 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика