97822

97822



std::cout « jakiesKolo.pole() « endl; // wynik: 28.274...

// wskaźniki -----------------------------

wskJakasFigura = &jakasFigura;

std::cout << wskJakasFigura->pole() << endl; // wynik: -1 wskJakasFigura = &jakisKwadrat;

std::cout << wskJakasFigura->pole() << endl; // wynik: 25 wskJakasFigura = &jakiesKolo;

std::cout « wskJakasFigura->pole() << endl; // wynik: 28.274...

// referencje -----------------------------

wyswietlPole( jakasFigura ); // wynik: -1 wyswietlPole( jakisKwadrat ); // wynik: 25 wyswietlPole( jakiesKolo ); // wynik: 28.274...

return 0;

)

Wywołanie metod składowych dla każdego z obiektów powoduje wykonanie metody odpowiedniej dla klasy danego obiektu. Następnie wskaźnikowi wskJakasFigura zostaje przypisany adres obiektu jakasFigura i zostaje wywołana metoda float pole(). Wynikiem jest "-1" zgodnie z treścią metody float pole O w klasie Figura. Następnie przypisujemy wskaźnikowi adres obiektu klasy Kwadrat - możemy tak zrobić ponieważ klasa Kwadrat jest klasą pochodną od klasy Figura - jest to tzw. rzutowanie w górę. Wywołanie teraz metody float pole() dla wskaźnika nie spowoduje wykonania metody zgodnej z typem wskaźnika - który jest typu Figura* lecz zgodnie z aktualnie wskazywanym obiektem, a więc wykonana zostanie metoda float pole() z klasy Kwadrat (gdyż ostatnie przypisanie wskaźnikowi wartości przypisywało mu adres obiektu klasy Kwadrat). Analogiczna sytuacja dzieje się gdy przypiszemy wskaźnikowi adres obiektu klasy Kolo. Następnie zostaje wykonana funkcja void wyswietlPole (Figuras) która przyjmuje jako parametr obiekt klasy Figura przez referencję. Tutaj również zostały wykonane odpowiednie metody dla obiektów klas pochodnych a nie metoda zgodna z obiektem jaki jest zadeklarowany jako parametr funkcji czyli float Figura::pole(). Takie działanie jest spowodowane przez przyjmowanie obiektu klasy Figura przez referencję. Gdyby obiekty były przyjmowane przez wartość (parametr bez &) zostałaby wykonana 3 krotnie metoda float Figura:: pole () i 3 krotnie wyświetlona wartość -1.

Czysta wirtualność

Określa to, że metoda z klasy bazowej deklarująca metodę wirtualną nigdy nie



Wyszukiwarka

Podobne podstrony:
ScanImage12 (3) •    przedmiot m.p=28,274 [kg] dla gęstości żeliwa 8000 [kg/m3] aodp=
098 TIF int main(int argc, char* argv[]){ KlasaNaucz t1; KlasaPrac s1; cout « tl.nldNaucz « endl; co
101 TIF cout « ((poch *) b)->weźRozm() « endl; return 0;} Rzutowanie klasy pochodnej na klasę pod
274 (28) 274 A Obliczanie wymiarów uzwojeń i obwodu magnetycznego lf _ "i. V ,
28 (274) Pensjonat Biały Dworek w Zakopanym
75793 Zdjęcie0056 (11) void Prostokąt () { Hit u y, for (i = 1; i <= 20; i++) ^ cout«"*"
cout << "Zarobki: " << zarobki << endl; Po zdefiniowaniu klasy w program
return 1; else return n*silnia(n-1); > int mainO { int n; std::cout << "Podaj liczbę:
ScanImage12 (3) •    przedmiot m.p=28,274 [kg] dla gęstości żeliwa 8000 [kg/m3] aodp=
ALG33 Poznaj C++ w pięć minut! 333 cout <<"metody pisz:x= « x << endl; ); class
28. Ekonomiczne wskaźniki potęgi Układu Warszawskiego / Wacław Stankiewicz // Przegląd
l.p. Nazwa Opis Wynik pożądany 1. Dzienny wskaźnik wykorzystania samolotu Liczba wylatanych
skanuj0016 (304) 28 Mathcad. ćwiczenia 4. Kliknij teraz dwukrotnie trzeci wynik. Na ekranie pojawi s
skanuj0018 (274) fezdział 2. ♦ Znaczniki, zmienne i typy danych 29 być dla nas przydatne podczas jeg

więcej podobnych podstron