220 Godzina 15
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.
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 ().
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.
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 ().