r15-06.doc

Post on 05-Nov-2015

214 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related