Программирование >>  Дополнительные возможности наследования 

1 ... 130 131 132 [ 133 ] 134 135 136 ... 265


г* Листинг 14.2 аналогичен листингу 14.1, однако включает новую функцию ** TelepahicFunction(). Она не создает объект Cat и даже не использует его в качестве параметра, однако может получить доступ к переменной-члену HowManyCats. Не лишним будет еше раз напомнить, что эта переменная-член относится не к какому-либо определенному объекту, а ко всему классу в целом. Поэтому если она объявлена как public, то может использоваться любой функцией программы.

Если статическая переменная-член будет объявлена как закрытая, то доступ к ней можно получить с помошью функции-члена. Но для этого необходимо наличие хотя бы одного объекта данного класса. Именно такой подход реализован в листинге 14.3. Затем мы перейдем к изучению статических функций-членов.

Дисшинг 14.3. Доступ к статическим чкеном с иомцщыа оОычиык функцвО-чиенов

Листинг 14.3. Закрытые статические переменные-члены ftinclude <iostream.h>

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

class Cat {

public:

Cat(int age):itsAge(age){ HowManyCats++; }

virtual CatO { HowManyCats--; } virtual int GetAgeO { return itsAge; } virtual void SetAge(int age) { itsAge = age; } virtual int GetHowManyO { return HowManyCats;

private; int itsAge;

static int HowManyCats; } ;

int Cat::HowManyCats = 0;

int mainO {

const int MaxCats = 5; int 1; Cat .CatHouse[MaxCats]; for (i = 0; KMaxCats; i++) CatHouse[i] = new Cat(i);

for (1 = 0; KMaxCats; i++) {

cout << There are ;

cout CatHouse[i]->GetHowMany();

cout cats left!\ n ;

cout Deleting the one which is

cout CatHouse[i]->GetAge()+2;

cout years old\ n ;

delete CatHouse[i];



38 39 40 41

CatHouse[i] = 0;

return 0;

There are 5 cats left! Deleting the one which is 2 years old There are 4 cats left! Deleting the one which is 3 years old There are 3 cats left! Deleting the one which is 4 years old There are 2 cats left! Deleting the one which is 5 years old There are 1 cats left! Deleting the one which is 6 years old

В строке 17 статическая переменная-член HowManyCats объявлена как private. Поэтому теперь доступ к ней закрыт для функций, не являющихся членами

класса, например для функции TelepathicFunction из предыдущего листинга.

Хотя переменная HowManyCats является статической, она все же находится в области видимости класса. Поэтому любая функция класса, например GetHoqManyO, может получить доступ к ней так же, как к любой обычной переменной-члену. Однако для вызова GetHowManyO функция должна иметь объект, через который осуществляется вызов.

Рвкомвнддетсо

Применяйте статические переменнью-члены для совместного использования данных несколькими объектами класса. Ограничьте доступ к статическим переменным-членам, объявив их как private или protected.

Нв рвкомвндувтся

Не используйте статические переменные-члены для хранения данных одного объекта. Эти переменные предназначены для обмена данными между объектами.

Статические функциичлены

Статические функции-члены подобны статическим переменным-членам: они не принадлежат одному объекту, а находятся в области видимости всего класса. Именно поэтому их можно вызывать даже в тех случаях, когда не было создано ни одного объекта класса, как показано в листинге 14.4.

йнсшииг 14.4. Сшашичесхив фунхции-чжвны

Листинг 14.4, Статические функции-члены ftinclude <iostream,h> class Cat



7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

public:

Cat(int age):itsAge(age){ HowManyCats++; } virtual CatO { HowManyCats--; }

virtual int GetAgeO { return itsAge; )

virtual void SetAge(int age) { itsAge = age; }

static int GetHowManyO { return HowManyCats; ) private:

int itsAge;

static int HowManyCats; } ;

int Cat::HowManyCats = 0;

void TelepathicFunction();

int mainO {

const int MaxCats = 5;

Cat *CatHouse[MaxCats]; int 1;

for (i = 0; KMaxCats; i++)

CatHouse[i] = new Cat(i); TelepathicFunctionO;

for ( i = 0; KMaxCats; i++) {

delete CatHouse[i]; TelepathicFunctionO;

>

return 0;

>

void TelepathicFunctionO {

cout There are Cat::GetHowMany() cats alive!\ n

There There There There There There There There There There

are 1 are 2 are 3 are 4 are 5 are 4 are 3 are 2 are 1 are 0

cats cats cats cats cats cats cats cats cats cats

alive!

ve! ve! ve!

ve! ve!

alive! alive! alive! alive!



1 ... 130 131 132 [ 133 ] 134 135 136 ... 265

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