Poznaj C++ w$ godziny0201

Poznaj C++ w$ godziny0201



192 Godzina 13

192 Godzina 13

57

58

59

60: }


cout « "wiek Frisky: " «    frisky.PobierzWiek() « endl;

cout « "wiek Boot: " « boot.PobierzWiek() « endl; return 0;

wiek Frisky: 5

Niech Frisky ma 6 lat...

Tworzenie Boot na podstawie Frisky

wiek Frisky: 6

wiek Boot: 6

Niech Frisky ma 7 lat...

wiek Frisky: 7

wiek Boot: 6


W liniach 6-19 deklarowana jest klasa KOT. W linii 9 deklarowany jest konstruktor domyślny, w linii 10 kopiujący.

W liniach 17 i 18 deklarowane są dwie zmienne wewnętrzne, każda jako wskaźnik do wartości typu int. Normalnie przechowywanie w klasie zmiennych typu int pod wskaźnikami jest niestosowane. Tutaj wykorzystaliśmy to tylko do zademonstrowania zarządzania danymi na stercie.

W liniach 21-27, domyślny konstruktor, rezerwuje dla dwóch zmiennych typu int pamięć na stercie i przypisuje im odpowiednie wartości.

W linii 29 rozpoczyna się konstruktor kopiujący. Zwróć uwagę na parametr rhs. Jest to często spotykana nazwa parametru konstruktora kopiującego (z ang. right-hand side — znajdujący się po prawej stronie). Jeśli spojrzysz na przypisania w liniach 33 i 34 zobaczysz, że obiekt przekazywany jako parametr znajduje się po prawej stronie operatora przypisania. Oto zasada działania konstruktora kopiującego:

□    W liniach 31 i 32 rezerwowana jest pamięć na stercie. W liniach 33 i 34 przepisywane tam są wartości z istniejącego obiektu klasy KOT.

□    Parametr rhs to obiekt klasy KOT przekazany do konstruktora kopiującego jako stała (const) referencja . Wykorzystujemy wewnętrzne funkcje rhs. PobierzWiek () i rhs . PobierzWage () do odczytania wartości zmiennych wewnętrznych jegoWiek i jegoWaga i przepisania ich do tworzonego obiektu.

□    Kiedy jest wywoływany konstruktor kopiujący, to istniejący obiekt klasy KOT jest przekazywany do niego jako parametr. Do zmiennych tworzonego obiektu można się odwoływać bezpośrednio, ale do odczytania zmiennych obiektu rhs trzeba wykorzystać funkcje dostępu.

Rysunek 13.3. ilustruje działanie konstruktora kopiującego z ostatniego przykładu. Wartości z istniejącego obiektu są kopiowane do pamięci zarezerwowanej dla nowego obiektu.

W linii 47 tworzony jest obiekt o nazwie Frisky. Wypisywany jest jego wiek. W linii 50 wiek Frisky jest zmieniany na 6. W linii 52 tworzony jest nowy obiekt, Boot, z wykorzystaniem konstruktora kopiującego i obiektu Frisky. Gdyby Frisky był przekazany przez wartość do funkcji, to również zostałby wywołany konstruktor kopiujący.

57:    cout « "wiek Frisky: " «    frisky.PobierzWiek() « endl;

58:    cout « "wiek Boot: " « boot.PobierzWiek() « endl;

59:    return 0;

60: }

EFEKT DZIAŁANIA:

wiek Frisky: 5

Niech Frisky ma 6 lat...

Tworzenie Boot na podstawie Frisky

wiek Frisky: 6

wiek Boot: 6

Niech Frisky ma 7 lat...

wiek Frisky: 7

wiek Boot: 6

ANALIZA:


W liniach 6-19 deklarowana jest klasa KOT. W linii 9 deklarowany jest konstruktor domyślny, w linii 10 kopiujący.

W liniach 17 i 18 deklarowane są dwie zmienne wewnętrzne, każda jako wskaźnik do wartości typu int. Normalnie przechowywanie w klasie zmiennych typu int pod wskaźnikami jest niestosowane. Tutaj wykorzystaliśmy to tylko do zademonstrowania zarządzania danymi na stercie.

W liniach 21-27. domyślny konstruktor, rezerwuje dla dwóch zmiennych typu int pamięć na stercie i przypisuje im odpowiednie wartości.

W linii 29 rozpoczyna się konstruktor kopiujący. Zwróć uwagę na parametr rhs. Jest to często spotykana nazwa parametru konstruktora kopiującego (z ang. righl-hand side - znajdujący się po prawej stronie). Jeśli spojrzysz na przypisania w liniach 33 i 34 zobaczysz, że obiekt przekazywany jako parametr znajduje się po prawej stronie operatora przypisania. Oto zasada działania konstruktora kopiującego:

□    W liniach 31 i 32 rezerwowana jest pamięć na stercie. W liniach 33 i 34 przepisywane tam są wartości z istniejącego obiektu klasy KOT.

□    Parametr rhs to obiekt klasy KOT przekazany do konstruktora kopiującego jako stała (const) referencja . Wykorzystujemy wewnętrzne funkcje rhs.PobierzWiek () i rhs . PobierzWage () do odczytania wartości zmiennych wewnętrznych jegoWiek i jegoWaga i przepisania ich do tworzonego obiektu.

□    Kiedy jest wywoływany konstruktor kopiujący, to istniejący obiekt klasy KOT jest przekazywany do niego jako parametr. Do zmiennych tworzonego obiektu można się odwoływać bezpośrednio, ale do odczytania zmiennych obiektu rhs trzeba wykorzystać funkcje dostępu.

Rysunek 13.3. ilustruje działanie konstruktora kopiującego z ostatniego przykładu. Wartości z istniejącego obiektu są kopiowane do pamięci zarezerwowanej dla nowego obiektu.

W linii 47 tworzony jest obiekt o nazwie Frisky. Wypisywany jest jego wiek. W linii 50 wiek Frisky jest zmieniany na 6. W linii 52 tworzony jest nowy obiekt, Boot, z wykorzystaniem konstruktora kopiującego i obiektu Frisky. Gdyby Frisky był przekazany przez wartość do funkcji, to również zostałby wywołany konstruktor kopiujący.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0073 Funkcje 59Rysunek 5.2 Funkcje 59 Prototyp, pod względem typu wartości zwra
Poznaj C++ w$ godziny0168 Referencje 157 Referencje 157 23; cout « ” 24: cout « " 25: re
Poznaj C++ w$ godziny0196 Zaawansowane funkcje 187 53:    } 54:    cou
Poznaj C++ w$ godziny0245 Dziedziczenie 237 43:    void ProsOJedzenie() { cout « &quo
s326 326 Poznaj Linux Rysunek 21.13. ImageMagick obsługuje ponad 60 formatów plików graficznych 10.
Poznaj C++ w$ godziny0029 Zaczynamy 13 Skompiluj program ponownie. Na ekranie powinieneś zobaczyć ko
Poznaj C++ w$ godziny0063 48 Godzina 4 12:    cout « "


Poznaj C++ w$ godziny0066 Instrukcje i wyrażenia 51 11:    if (x > 10) 12:  &
Poznaj C++ w$ godziny0081 Funkcje 67 Program wraca do funkcji main(), do linii 13. Okazuje się, że w
Poznaj C++ w$ godziny0084 70 Godzina 5 70 Godzina 5 8: 9: 10 11 12 13 14 15 16 17 18 19 20
Poznaj C++ w$ godziny0100 86 Godzina 6 86 Godzina 6 11 12 13 14 15 16 17 18 19 20
Poznaj C++ w$ godziny0130 118 Godzina 8 11:    { 12:    lieznik++; 13:
Poznaj C++ w$ godziny0140 Wskaźniki 129 Wskaźniki 129 13 14 15 16 17 18 cout « "longVar: "
Poznaj C++ w$ godziny0156 145Zaawansowane wykorzystanie wskaźników W liniach 6-13 deklarujemy klasę
Poznaj C++ w$ godziny0191 IfZaawansowane narzędziaGodzina 13    Zaawansowane funkcje
Poznaj C++ w$ godziny0193 184 Godzina 13 Listing 13.1. Przeciążanie wewnętrznych funkcji
Poznaj C++ w$ godziny0195 186Godzina 13 Listing 13.2. Wykorzystanie wartości

więcej podobnych podstron