|
Программирование >> Дополнительные возможности наследования
г* Листинг 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!
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |