r15-06.doc

35
 Rozdział 15. Specjalne klasy i funkcje C++ oferuje kilka sposobów na ograniczenie zakresu i oddziaływania zmiennych i wskaźników. Do tej pory dowiedzieli!my si" jak tworzy# zmienne globalne lokalne zmienne funkcji wskaźniki do zmiennych oraz zmienne składowe klas. $ tego rozdziału dowiesz si"% czym s& zmienne statyczne i funkcje składowe  jak u'ywa# zmiennych staty cznych i statycznych funkcji składowych  jak tworzy# i operowa# wskaźnikami do funkc ji i wskaźnikami do funkcji składowy ch  jak pracowa# z tablicami wskaźn ików do funkcji. Statyczne dane składowe (rawdopodobnie do tej pory uwa'ałe! dane ka'dego obiektu za unikalne dla tego obiektu )i nie współu'ytkowane pomi"dzy obiektami klasy*. dyby! miał na przykład pi"# obiektów klasy Cat ka'dy z nich miałby swój wiek wag" itp. ,iek jednego kota nie wpływa na wiek innego. Czasem zdarza si" jednak 'e chcemy !ledzi# pul" danych. -a przykład mo'emy chcie# wiedzie# ile obiektów danej klasy zostało stworzonych w programie a tak'e ile z nich istnieje nadal. tatyczne zmienne składowe s& współu'ytkowane przez wszystkie egzemplarze obiektów klasy. tanowi& one kompromis pomi"dzy danymi globalnymi które s& dost"pne dla wszystkich cz"!ci  programu a danymi składowymi które zwy kle s& dost"pne tylko dla konkretnego obiektu. tatyczne składowe mo'na traktowa# jako nale'&ce do całej klasy a nie tylko do pojedynczego obiektu. $wykł ae danae składowae odnosi si" do pojedynczego przechowywane s& po jednej dla ka'dego obiektu a dana składowae statycznae odnosi si" s& przechowywane po jednej dla  do całej klasy. /isting 01.0 deklaruje obiekt Cat zawieraj&cy statyczn& składow& HowManyCats )ile kotów*. 2a zmienna !ledzi ile obiektów klasy Cat zostało utworzonych. 3ledzenie odbywa si"  poprzez inkrementacj" staty cznej zmiennej HowManyCats w konstruktorze klasy i dekrementowanie jej w destruktorze.

Upload: greg

Post on 05-Nov-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Szablon dla tlumaczy

2

Cz I ( Podstawy obsugi systemu WhizBang (Nagwek strony)

Rozdzia 15.Specjalne klasy i funkcje

C++ oferuje kilka sposobw na ograniczenie zakresu i oddziaywania zmiennych i wskanikw. Do tej pory, dowiedzielimy si, jak tworzy zmienne globalne, lokalne zmienne funkcji, wskaniki do zmiennych oraz zmienne skadowe klas.

Z tego rozdziau dowiesz si:

czym s zmienne statyczne i funkcje skadowe,

jak uywa zmiennych statycznych i statycznych funkcji skadowych,

jak tworzy i operowa wskanikami do funkcji i wskanikami do funkcji skadowych,

jak pracowa z tablicami wskanikw do funkcji.

Statyczne dane skadowe

Prawdopodobnie do tej pory uwaae dane kadego obiektu za unikalne dla tego obiektu (i nie wspuytkowane pomidzy obiektami klasy). Gdyby mia na przykad pi obiektw klasy Cat, kady z nich miaby swj wiek, wag, itp. Wiek jednego kota nie wpywa na wiek innego.

Czasem zdarza si jednak, e chcemy ledzi pul danych. Na przykad, moemy chcie wiedzie, ile obiektw danej klasy zostao stworzonych w programie, a take ile z nich istnieje nadal. Statyczne zmienne skadowe s wspuytkowane przez wszystkie egzemplarze obiektw klasy. Stanowi one kompromis pomidzy danymi globalnymi, ktre s dostpne dla wszystkich czci programu, a danymi skadowymi, ktre zwykle s dostpne tylko dla konkretnego obiektu.

Statyczne skadowe mona traktowa jako nalece do caej klasy, a nie tylko do pojedynczego obiektu. Zwyka dana skadowa odnosi si do pojedynczego obiektu, a dana skadowa statyczna odnosi si do caej klasy. Listing 15.1 deklaruje obiekt Cat, zawierajcy statyczn skadow HowManyCats (ile kotw). Ta zmienna ledzi, ile obiektw klasy Cat zostao utworzonych. ledzenie odbywa si poprzez inkrementacj statycznej zmiennej HowManyCats w konstruktorze klasy i dekrementowanie jej w destruktorze.

Listing 15.1. Statyczne dane skadowe

0: //Listing 15.1 Statyczne dane skadowe

1:

2: #include

3: using namespace std;

4:

5: class Cat

6: {

7: public:

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

9: virtual ~Cat() { HowManyCats--; }

10: virtual int GetAge() { return itsAge; }

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

12: static int HowManyCats;

13:

14: private:

15: int itsAge;

16:

17: };

18:

19: int Cat::HowManyCats = 0;

20:

21: int main()

22: {

23: const int MaxCats = 5; int i;

24: Cat *CatHouse[MaxCats];

25: for (i = 0; i