[ Pobierz całość w formacie PDF ]
.Rozdzia³ 15.Specjalne klasy i funkcjeC++ oferuje kilka sposobów na ograniczenie zakresu i oddzia³ywania zmiennych iwskaŸników.Do tej pory, dowiedzieliœmy siê, jak tworzyæ zmienne globalne,lokalne zmienne funkcji, wskaŸniki do zmiennych oraz zmienne sk³adowe klas.Z tego rozdzia³u dowiesz siê:czym s¹ zmienne statyczne i funkcje sk³adowe,jak u¿ywaæ zmiennych statycznych i statycznych funkcji sk³adowych,jak tworzyæ i operowaæ wskaŸnikami do funkcji i wskaŸnikami do funkcjisk³adowych,jak pracowaæ z tablicami wskaŸników do funkcji.Statyczne dane sk³adowePrawdopodobnie do tej pory uwa¿a³eœ dane ka¿dego obiektu za unikalne dla tegoobiektu (i nie wspó³u¿ytkowane pomiêdzy obiektami klasy).Gdybyœ mia³ naprzyk³ad piêæ obiektów klasy Cat, ka¿dy z nich mia³by swój wiek, wagê, itp.Wiek jednego kota nie wp³ywa na wiek innego.Czasem zdarza siê jednak, ¿e chcemy œledziæ pulê danych.Na przyk³ad, mo¿emychcieæ wiedzieæ, ile obiektów danej klasy zosta³o stworzonych w programie, atak¿e ile z nich istnieje nadal.Statyczne zmienne sk³adowe s¹ wspó³u¿ytkowaneprzez wszystkie egzemplarze obiektów klasy.Stanowi¹ one kompromis pomiêdzydanymi globalnymi, które s¹ dostêpne dla wszystkich czêœci programu, a danymisk³adowymi, które zwykle s¹ dostêpne tylko dla konkretnego obiektu.Statyczne sk³adowe mo¿na traktowaæ jako nale¿¹ce do ca³ej klasy, a nie tylko dopojedynczego obiektu.Zwyk³ae danae sk³adowae odnosi siê do pojedynczegoprzechowywane s¹ po jednej dla ka¿dego obiektu, a dana sk³adowae statycznaeodnosi siê s¹ przechowywane po jednej dla do ca³ej klasy.Listing 15.1deklaruje obiekt Cat, zawieraj¹cy statyczn¹ sk³adow¹ HowManyCats (ile kotów).Ta zmienna œledzi, ile obiektów klasy Cat zosta³o utworzonych.Œledzenie odbywasiê poprzez inkrementacjê statycznej zmiennej HowManyCats w konstruktorze klasyi dekrementowanie jej w destruktorze.Listing 15.1.Statyczne dane sk³adowe0: //Listing 15.1 Statyczne dane sk³adowe1:2: #include3: using namespace std;4:5: class Cat6: {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
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL