Poznaj C++ w$ godziny0156

Poznaj C++ w$ godziny0156



145


Zaawansowane wykorzystanie wskaźników


W liniach 6-13 deklarujemy klasę ZwyklyKot. Linia 9 deklaruje konstruktor. Linie 15-19 zawierają definicję. Linia 10 deklaruje destruktor klasy ZwyklyKot, którego definicja znajduje się w liniach 21-24.

W linii 29 na stosie tworzony jest obiekt Frisky co powoduje wywołanie konstruktora klasy. W linii 31, na stosie tworzony jest obiekt klasy ZwyklyKot, wskazywany przez pRags. Ponownie wywoływany jest konstruktor. W linii 33 obiekt wskazywany przez pRags jest kasowany co powoduje wywołanie destruktora klasy. Kiedy program się kończy, to automatycznie kasowany jest obiekt Frisky i również jest wywoływany destruktor klasy.

Dostęp do danych wewnętrznych klasy

Dotychczas, dostęp do wewnętrznych danych i funkcji obiektów klasy zadeklarowanych lokalnie realizowany był poprzez użycie operatora kropka ( . ). Żeby dostać się do elementów obiektu stworzonego na stercie musisz pośrednio odwołać się do tego obiektu za pomocą wskaźnika. Żeby wywołać funkcję wewnętrzną PobierzWiek () powinieneś napisać:

{*pRags).PobierzWiek()

Nawiasy gwarantują, że odwołanie do obiektu nastąpi przed próbą dostępu do funkcji PobierzWiek ().

Ponieważ takie stosowanie wskaźników jest raczej nieporęczne, C++ oferuje specjalny operator dla pośredniego dostępu do obiektów wskazywanych przez wskaźniki. Operator „wskazujący na” ( -> ) składający się z myślnika ( - ) i znaku większości ( > ). C++ traktuje to jako pojedynczy symbol. Listing 10.2. demonstruje dostęp do zmiennych i funkcji wewnętrznych obiektu stworzonego na stercie.

Listing 10.2. Dostęp do danych i funkcji wewnętrznych obiektu na stercie.

1:    // Listing 10.2

2:    // Dostęp do danych i funkcji obiektu na stercie


3:

4:

6:

8:

9:

10

11

12

13

14

15

16 17

19

20 21 22


#include <iostream.h>5: class ZwyklyKot7: {


public:

ZwyklyKot() {jegoWiek =5; 1 -ZwyklyKot()    {}

int PobierzWiek() const { return jegoWiek; } void UstawWiek(int wiek) { jegoWiek = wiek; )


private:

int jegoWiek;


} ;


int main()18:    {

ZwyklyKot * Frisky = new ZwyklyKot;

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

cout « "Frisky ma " « Frisky->PobierzWiek() « "


lat\n";


Zaawansowane wykorzystanie wskaźników

ANALIZA:


145


W liniach 6-13 deklarujemy klasę ZwyklyKot. Linia 9 deklaruje konstruktor. Linie 15-19 zawierają definicję. Linia 10 deklaruje destruktor klasy ZwyklyKot, którego definicja znajduje się w liniach 21-24.

W linii 29 na stosie tworzony jest obiekt Frisky co powoduje wywołanie konstruktora klasy. W linii 31, na stosie tworzony jest obiekt klasy ZwyklyKot, wskazywany przez pRags. Ponownie wywoływany jest konstruktor. W linii 33 obiekt wskazywany przez pRags jest kasowany co powoduje wywołanie destruktora klasy. Kiedy program się kończy, to automatycznie kasowany jest obiekt Frisky i również jest wywoływany destruktor klasy.

Dostęp do danych wewnętrznych klasy

Dotychczas, dostęp do wewnętrznych danych i funkcji obiektów klasy zadeklarowanych lokalnie realizowany byl poprzez użycie operatora kropka ( . ). Żeby dostać się do elementów obiektu stworzonego na stercie musisz pośrednio odwołać się do tego obiektu za pomocą wskaźnika. Żeby wywołać funkcję wewnętrzną PobierzWiek () powinieneś napisać:

(*pRags) . PobierzWiek ()

Nawiasy gwarantują, że odwołanie do obiektu nastąpi przed próbą dostępu do funkcji PobierzWiek().

Ponieważ takie stosowanie wskaźników jest raczej nieporęczne, C++ oferuje specjalny operator dla pośredniego dostępu do obiektów wskazywanych przez wskaźniki. Operator „wskazujący na” ( -> ) składający się z myślnika ( - ) i znaku większości ( > ). C++ traktuje to jako pojedynczy symbol. Listing 10.2. demonstruje dostęp do zmiennych i funkcji wewnętrznych obiektu stworzonego na stercie.

Listing 10.2. Dostęp do danych i funkcji wewnętrznych obiektu na stercie.

1:    // Listing 10.2

2:    // Dostęp do danych    i    funkcji obiektu na stercie

3:

4:    #include <iostream.h>5:

6:    class ZwyklyKot7: {

8:    public:

9:    ZwyklyKot() (jegoWiek = 5; }

10:    -ZwyklyKot () {)

11:    int PobierzWiek() const { return jegoWiek; }

12:    void OstawWiek(int    wiek)    {    jegoWiek = wiek; )

13:    private:

14:    int jegoWiek;

15:    ) ;

16:

17:    int main()18:    {

19:    ZwyklyKot * Frisky    = new    ZwyklyKot;

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

21:    Frisky->0stawWiek(lO);

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


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0158 Zaawansowane wykorzystanie wskaźników 147 32:    } 33: 34:
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$ godziny0186 175Zaawansowane referencje i wskaźniki Wskaźnik plnt jest deklarowany i in
Poznaj C++ w$ godziny0180 169Zaawansowane referencje i wskaźniki 39:    FunkcjaDruga(
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$ godziny0188 177Zaawansowane referencje i wskaźniki 18:    ZwyklyKot::Zw
Poznaj C++ w$ godziny0190 Zaawansowane referencje i wskaźniki 179 ZAWSZE NIGDY Zawsze przekazuj p
Poznaj C++ w$ godziny0202 Zaawansowane funkcje 193 W liniach 53 i 54 wypisywany jest wiek obydwu KOT
Poznaj C++ w$ godziny0062 Instrukcje i wyrażenia 47Instrukcja if Normalnie program wykonuje się lini
Poznaj C++ w$ godziny0137 IIIZarządzanie pamięcią Godzina 9 Wskaźniki 10    Zaawansow
Poznaj C++ w$ godziny0140 Wskaźniki 129 Wskaźniki 129 13 14 15 16 17 18 cout « "longVar: "
Poznaj C++ w$ godziny0144 Wskaźniki 133 Operator dostępu pośredniego ( * ) jest używany w dwóch różn
Poznaj C++ w$ godziny0146 Wskaźniki 135 Wskaźniki 135 ANALIZA: W tym programie deklarujemy dwie zmie
Poznaj C++ w$ godziny0148 Wskaźniki 137Dlaczego będziemy wykorzystywać wskaźniki? Jak dotąd, krok po
Poznaj C++ w$ godziny0159 148 Godzina 10 Listing 10.4. Wykorzystanie wskaźnika
Poznaj C++ w$ godziny0163 152 Godzina 10 W linii 41 wykorzystujemy wskaźnik pProst do ustalenia szer
Poznaj C++ w$ godziny0164 Godzina 11Referencje W ciągu ostatnich dwóch godzin nauczyłeś się, jak wyk

więcej podobnych podstron