Poznaj C++ w$ godziny0229

Poznaj C++ w$ godziny0229



220 Godzina 15

EFEKT DZIAŁANIA:

Kot #1: 1 Kot #2: 3 Kot #3: 5

Kot #499: 997 Kot #500: 999

ANALIZA:


W liniach 5—17 deklarujemy klasę KOT, taką samą jak w listingu 15.2. Jednak tym razem, tablica Rodzina zadeklarowana w linii 21 przechowuje nie obiekty klasy KOT, a wskaźniki do obiektów na stercie.

W pętli inicjalizującej (linie 24-28), na stercie jest tworzone 500 obiektów KOT. Wiek każdego z nich jest inicjalizowany podwojoną wartość indeksu zwiększoną o jeden. Wiek pierwszego kota wynosi 1, drugiego 3, trzeciego 5 itd. W linii 28 wskaźnik jest wstawiany do tablicy.

Ponieważ tablica jest przystosowana do przechowywania wskaźników, dlatego nie wstawiamy do niej obiektów, a wskaźniki do nich.

Druga pętla (linie 31 i 32) wypisuje na ekranie zawartość obiektów. Wskaźnik jest wybierany poprzez podanie indeksu Rodzina [i]. Poprzez wybrany adres odwołujemy się do metody PobierzWiek () konkretnego obiektu.

W tym przykładzie tablica i wskaźniki w niej zawarte są przechowywane na stosie, Jednak wszystkie 500 KOTów znajduje się na stercie.

Deklarowanie tablicy na stercie

Istnieje możliwość umieszczenia całej tablicy na stercie. Wykorzystuje się do tego new i operator indeksu. Otrzymujemy w ten sposób wskaźnik do obszaru na stercie przechowującego tablicę. Np:

KOT *Rodzina = new KOT[500];

W ten sposób Rodzina staje się wskaźnikiem na pierwszy element pięciuset elementowej tabhcy obiektów klasy KOT. Innymi słowy, Rodzina jest adresem elementu Rodzina[0].

Zaletą takiego rozwiązania jest możliwość wykorzystania arytmetyki wskaźników do zarządzania elementami tabhcy Rodzina. Możesz np. napisać tak:

KOT *Rodzina = new KOT[500]; KOT pKot = Rodzina; pKot->OstawWiek(10); pKot++;

pKot->UstawWiek(20);


// pKot wskazuje na Rodzina[0] // niech Rodzina[0] ma 10 lat // przejdź na Rodzina[1]

// niech Rodzina[1] ma 20 lat


W ten sposób deklarujemy tablicę 500 KOTów. Wskaźniki Rodzina i pKot wskazują na początek tabhcy. Za pomocą pKot wywołujemy metodę UstawWiek (). Następnie ~l inkrementujemy wskaźnik tak, aby wskazywał na następny element tabhcy i ponownie wywołujemy metodę UstawWiek ().

EFEKT DZIAŁANIA:

Kot #1: 1 Kot #2: 3 Kot #3: 5

Kot #499: 997 Kot #500: 999

ANALIZA:


W liniach 5-17 deklarujemy klasę KOT, taką samą jak w listingu 15.2. Jednak tym razem, tablica Rodzina zadeklarowana w linii 21 przechowuje nie obiekty klasy KOT, a wskaźniki do obiektów na stercie.

W pętli inicjalizującej (linie 24-28), na stercie jest tworzone 500 obiektów KOT. Wiek każdego z nich jest inicjalizowany podwojoną wartość indeksu zwiększoną o jeden. Wiek pierwszego kota wynosi 1, drugiego 3, trzeciego 5 itd. W linii 28 wskaźnik jest wstawiany do tablicy.

Ponieważ tablica jest przystosowana do przechowywania wskaźników, dlatego nie wstawiamy do niej obiektów, a wskaźniki do nich.

Druga pętla (linie 31 i 32) wypisuje na ekranie zawartość obiektów. Wskaźnik jest wybierany poprzez podanie indeksu Rodzina [i]. Poprzez wybrany adres odwołujemy się do metody PobierzWiek () konkretnego obiektu.

W tym przykładzie tablica i wskaźniki w niej zawarte są przechowywane na stosie, Jednak wszystkie 500 KOTów znajduje się na stercie.

Deklarowanie tablicy na stercie

Istnieje możliwość umieszczenia całej tablicy na stercie. Wykorzystuje się do tego new i operator indeksu. Otrzymujemy w ten sposób wskaźnik do obszaru na stercie przechowującego tablicę. Np:

KOT ‘Rodzina = new KOT[500];

W ten sposób Rodzina staje się wskaźnikiem na pierwszy element pięciuset elementowej tablicy obiektów klasy KOT. Innymi słowy, Rodzina jest adresem elementu Rodzina[0].

Zaletą takiego rozwiązania jest możliwość wykorzystania arytmetyki wskaźników do zarządzania elementami tablicy Rodzina. Możesz np. napisać tak:

KOT ‘Rodzina = new KOT[500]; KOT pKot = Rodźina; pKot-MJstawWiek (10) ; pKot++;

pKot->UstawWiek(20);


// pKot wskazuje na Rodzina[0] // niech Rodzina[0] ma 10 lac // przejdź na Rodzina[1]

// niech Rodzina[1] ma 20 lat


W ten sposób deklarujemy tablicę 500 KOTów. Wskaźniki Rodzina i pKot wskazują na początek tablicy. Za pomocą pKot wywołujemy metodę OstawWiek(). Następnie inkrementujemy wskaźnik tak, aby wskazywał na następny element tablicy i ponownie wywołujemy metodę OstawWiek ().


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0051 Zmienne i stałe 35 enum KOLOR { CZERNOMY-lOO, NIEBIESKI, ZIELONY=500, BIAŁ
Poznaj C++ w$ godziny0097 Proste klasy 83Dostęp do zasobów klasy Jeśli masz zdefiniowany obiekt Kot
Poznaj C++ w$ godziny0098 84 Godzina 6 class Kot { unsigned int jegoWiek; unsigned int jegoWaga;&nbs
Poznaj C++ w$ godziny0099 Proste klasy85 unsigned int Waga; void Miaucz(); Kot.Frisky; Frisky.Wiek =
Poznaj C++ w$ godziny0105 Proste klasy 91 Linia 58 zawiera definicję obiektu Frisky (będącego klasy
Poznaj C++ w$ godziny0111 98 Godzina 7Listing 7.2. Implementacja klasy Kot w pliku kot . CPP. 1: &nb
Poznaj C++ w$ godziny0225 216 Godzina 15 216 Godzina 15 ANALIZA: W liniach 5—17 deklarujemy klasę KO
Poznaj C++ w$ godziny0055 40 Godzina 4EFEKT DZIAŁANIA; a: Ob: 0x: Oy: 35 a: 9 b: 7 x: 16 y: 16 W lin
Poznaj C++ w$ godziny0077 Funkcje 63EFEKT DZIAŁANIA: Podaj temperaturę w stopniach Fehrenheit-a: 212
Poznaj C++ w$ godziny0117 Godzina 8Zaawansowane sterowanie programem Działanie każdego większego pro
Poznaj C++ w$ godziny0131 Zaawansowane sterowanie programem 119EFEKT DZIAŁANIA: No to ile razy sie p
Poznaj C++ w$ godziny0183 172 Godzina 12 172 Godzina 12 EFEKT DZIAŁANIA: Tworzenie kota... Konstrukt
Poznaj C++ w$ godziny0187 176 Godzina 12 EFEKT DZIAŁANIA: Compile error: Attempting to return a refe
Poznaj C++ w$ godziny0209 200 Godzina 14EFEKT DZIAŁANIA: Nartosc i wynosi: 0 Wartość i wynosi: 1&nbs
Poznaj C++ w$ godziny0216 Przeciążanie operatorów 207 EFEKT DZIAŁANIA: Compile error! Unable to conv
Poznaj C++ w$ godziny0236 Tablice 227 jEFEKT DZIAŁANIA: Lancuchl: Nikt nie jest sam Lancuch2: Nikt n
Poznaj C++ w$ godziny0001 Gdy masz czas tylko na właściwe rozwiązania... Intersoftlcind Gdy masz cza
Poznaj C++ w$ godziny0002 Jesse LibertyC++w 2 4 godziny Tłumaczenie: Grzegorz MichałekInlersofllond
Poznaj C++ w$ godziny0003 Tytuł oryginału: Teach Yourself C++ in 24 Hours, Second Edition Tłumaczeni

więcej podobnych podstron