Poznaj C++ w$ godziny0158

Poznaj C++ w$ godziny0158



Zaawansowane wykorzystanie wskaźników 147

32:    }

33:

34:    int main()35:    {

36:    ZwyklyKot *Frisky = new ZwyklyKot;

37:    cout « "Frisky ma ” « Frisky->PobierzWiek() « " lat\n";

38:    Frisky->UstawWiek(15);

39:    cout « "Frisky ma " « Frisky->PobierzWiek() « " lat\n";

40:    delete Frisky;

41:    return 0;

42:    }

EFEKT DZIAŁANIA:

Frisky ma 5 lat Frisky ma 15 lat

Klasa ZwyklyKot ma dwie zmienne wewnętrzne — wskaźniki na int

ANALIZA:


(patrz linie 18 i 19). Konstruktor (linie 22-26) inicjalizuje oba wskaźniki adresami zarezerwowanej pamięci na stercie i wpisuje pod te adresy wartości domyślne.

Destruktor (linie 28-32) zwalnia zarezerwowaną pamięć. Ponieważ jest to destruktor, to nie ma potrzeby przypisania wartości nuli wskaźnikom, ponieważ nie będą one już dłużej dostępne. W tym przypadku można pominąć zasadę przypisywania wartości nuli kasowanym wskaźnikom (aczkolwiek nic by się nie stało gdybyśmy i tutaj tę zasadę zastosowali).

Funkcja wywołująca, w tym przypadku main (), „nie wie”, że jegoWiek i jegoWaga są wskaźnikami. main() wywołuje metody PobierzWiek () i UstawWiek (),

a szczegóły operacji na pamięci zaszyte są wewnątrz implementacji klasy. W linii 40 kasowany jest obiekt Frisky, wywoływany jest automatycznie destruktor klasy. Destruktor kasuje wskaźniki. Jeśli wskaźniki wskazywały by na obiekty innej klasy, to zostałyby wywołane destruktory tych klas.

Wskaźnik this

Każda wewnętrzna funkcja klasy ma ukryty parametr: wskaźnik this. this zawsze wskazuje na aktualny obiekt. Przy każdym wywołaniu metod PobierzWiek () albo UstawWiek (), wskaźnik this jest dołączany jako ukryty parametr Zadaniem wskaźnika this jest wskazywanie na obiekt, którego metoda została wywołana. Zazwyczaj nie będziesz go potrzebował; będziesz tylko wywoływać metody i zmieniać zmienne wewnętrzne. Jednak czasami będziesz musiał zagwarantować dostęp do obiektu (np. zwrócić adres aktualnego obiektu). W takiej sytuacji this będzie bardzo pomocne.

W normalnej sytuacji, aby dostać się do elementów klasy, nie potrzebujesz wskaźnika this. Możesz jednak bezpośrednio odwołać się do this. Ilustruje to listing

10.4.

)

32

33

34

36

37

38

39

40

41

42


int roain () 35:    {

ZwyklyKot *Frisky = new ZwyklyKot;

cout « "Frisky ma ” « Frisky->PobierzWiek() « " lat\n"; Frisky->UstawWiek(15);

cout « "Frisky ma " « Frisky->PobierzWiek() « " lat\n"; delete Frisky; return 0;

)

EFEKT DZIAŁANIA;

Frisky ma 5 lat Frisky ma 15 lat

ANALIZA


Klasa ZwyklyKot ma dwie zmienne wewnętrzne — wskaźniki na int (patrz linie 18 i 19). Konstruktor (linie 22-26) inicjalizuje oba wskaźniki adresami zarezerwowanej pamięci na stercie i wpisuje pod te adresy wartości domyślne.

Destruktor (linie 28-32) zwalnia zarezerwowaną pamięć. Ponieważ jest to destruktor, to nie ma potrzeby przypisania wartości nuli wskaźnikom, ponieważ nie będą one już dłużej dostępne. W tym przypadku można pominąć zasadę przypisywania wartości nuli kasowanym wskaźnikom (aczkolwiek nic by się nie stało gdybyśmy i tutaj tę zasadę zastosowali).

Funkcja wywołująca, w tym przypadku main (), „nie wie”, że jegoWiek i jegoWaga są wskaźnikami. main() wywołuje metody PobierzWiek() i UstawWiek(), a szczegóły operacji na pamięci zaszyte są wewnątrz implementacji klasy. W linii 40 kasowany jest obiekt Frisky, wywoływany jest automatycznie destruktor klasy. Destruktor kasuje wskaźniki. Jeśli wskaźniki wskazywały by na obiekty innej klasy, to zostałyby wywołane destruktory tych klas.

Wskaźnik this

Każda wewnętrzna funkcja klasy ma ukryty parametr: wskaźnik this. this zawsze wskazuje na aktualny obiekt. Przy każdym wywołaniu metod PobierzWiek () albo OstawWiek (), wskaźnik this jest dołączany jako ukryty parametr Zadaniem wskaźnika this jest wskazywanie na obiekt, którego metoda została wywołana. Zazwyczaj nie będziesz go potrzebował; będziesz tylko wywoływać metody i zmieniać zmienne wewnętrzne. Jednak czasami będziesz musiał zagwarantować dostęp do obiektu (np. zwrócić adres aktualnego obiektu). W takiej sytuacji this będzie bardzo pomocne.

W normalnej sytuacji, aby dostać się do elementów klasy, nie potrzebujesz wskaźnika this. Możesz jednak bezpośrednio odwołać się do this. Ilustruje to listing 10.4.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0160 Zaawansowane wykorzystanie wskaźników 149Do czego służy wskaźnik this Gdyb
Poznaj C++ w$ godziny0162 Zaawansowane wykorzystanie wskaźników 151 Zaawansowane wykorzystanie wskaź
Poznaj C++ w$ godziny0156 145Zaawansowane wykorzystanie wskaźników W liniach 6-13 deklarujemy klasę
Poznaj C++ w$ godziny0182 Zaawansowane referencje i wskaźniki 171 int PobierzWiek() const { return j
Poznaj C++ w$ godziny0184 Zaawansowane referencje i wskaźniki 173 Ponieważ wiemy, że obiekt nie będz
Poznaj C++ w$ godziny0190 Zaawansowane referencje i wskaźniki 179 ZAWSZE NIGDY Zawsze przekazuj p
Poznaj C++ w$ godziny0114 Więcej o klasach 101 32 33 34:    < 35 36 37 38 39 40 41
Poznaj C++ w$ godziny0123 Zaawansowane sterowanie programem 111 W linii 32 obliczana jest reszta z d
Poznaj C++ w$ godziny0119 Zaawansowane sterowanie programem 107Pętle while Pętla while pozwala na po
Poznaj C++ w$ godziny0121 Zaawansowane sterowanie programem 109 W liniach 12-15 wprowadzamy wartości
Poznaj C++ w$ godziny0125 Zaawansowane sterowanie programem Listing 8.6. Pomijanie pętli while 1:
Poznaj C++ w$ godziny0127 Zaawansowane sterowanie programem 115Listing 8.8. Jeszcze raz pętla while
Poznaj C++ w$ godziny0129 Zaawansowane sterowanie programem 117Listing 8.10. Demonstracja wielokrotn
Poznaj C++ w$ godziny0131 Zaawansowane sterowanie programem 119EFEKT DZIAŁANIA: No to ile razy sie p
Poznaj C++ w$ godziny0133 Zaawansowane sterowanie programem 121 Jaki znak?
Poznaj C++ w$ godziny0135 Zaawansowane sterowanie programem 153 20:    break; 21: &nb
Poznaj C++ w$ godziny0180 169Zaawansowane referencje i wskaźniki 39:    FunkcjaDruga(
Poznaj C++ w$ godziny0186 175Zaawansowane referencje i wskaźniki Wskaźnik plnt jest deklarowany i in
Poznaj C++ w$ godziny0188 177Zaawansowane referencje i wskaźniki 18:    ZwyklyKot::Zw

więcej podobnych podstron