Poznaj C++ w$ godziny0254

Poznaj C++ w$ godziny0254



246 Godzina 16

11:    protected:

12:    int jegoWiek;

13:    int jegoWaga;

14:    ) ;

15:

16:    class Pies : public Ssak

17:    {

18:    public:

19:    void Ruch() const { cout « "Pies przeszedł 5 krokow.\n"; }

20:    };    // Możesz otrzymać ostrzeżenie o ukrywaniu metody

21:

22:    int main()

23:    {

24:    Ssak duzeZwierze;

25:    Pies fido;

26:    duzeZwierze.Ruch();

27:    duzeZwierze.Ruch(2);

28:    fido.Ruch();

29:    // fido.Ruch(10);

30:    return 0;

31:    }

ĘFEKT DZIAŁANIA:

Ssak przeszedł jeden krok Ssak przeszedł 2 kroki. Pies przeszedł 5 kroków.

ANALIZA


Z programu usunęliśmy wszystkie, chwilowo niepotrzebne metody. W liniach 8 i 9 znajdują się deklaracje przeciążonych metod Ruch (). W linii 18, klasa Pies nadpisuje bezargumentową metodę Ruch(). W liniach 26—28 wywoływane są odpowiednie metody Ruch (). Wydruk wyjściowy stanowi informację o tym, co zostało wywołane.

Linia 29 została zakomentowana ponieważ powoduje błąd kompilacji. Jeśli klasą Pies nie nadpisałyby metody Ruch() to mogłaby wywołać metodę Ruch (int). Teraz, jeśli chcielibyśmy wykorzystać metodę z parametrem, musielibyśmy również ją nadpisać. Zwróć uwagę na analogię z konstruktorami. Jeżeli stworzysz jakikolwiek konstruktor to kompilator nie będzie już zapewniał konstruktora domyślnego.

Bardzo częstym błędem jest nieświadome ukrycie metod klasy bazowej przy próbie nadpisania ich. Przyczyną jest pominięcie słowa kluczowego const. const jest częścią sygnatury funkcji i pominięcie go zmienia sygnaturę powodując ukrycie funkcji zamiast jej nadpisania.

Wywołanie metody bazowej

Jeśli nadpisałeś metodę bazową to nadal istnieje możliwość wywołania nadpisanej funkcji. Należy w tym celu podać pełną nazwę metody łącznie z nazwą klasy bazowej. Oto przykład:

Ssak: :Ruch()

Możliwa jest również pewna ciekawa modyfikacja linii 29 ostatniego programu:

29:    fido.Ssak::Ruch(10);

11:    protected:

12:    int jegoWiek;

13:    int jegoWaga;

14:    ) ;

15:

16:    class Pies : public Ssak

17:    {

18:    public:

19:    void Ruch() const ( cout « "Pies przeszedł 5 krokow.\n"; )

20:    );    II Możesz otrzymać ostrzeżenie o ukrywaniu metody

21:

22:    int ntain()

23:    (

24:    Ssak duzeZwierze;

25:    Pies fido;

26:    duzeZwierze.Ruch();

27:    duzeZwierze.Ruch(2);

28:    fido.Ruch();

29:    // fido.Ruch(lO);

30:    return 0;

31:    )

EFEKT DZIAŁANIA:

Ssak przeszedł jeden krok Ssak przeszedł 2 kroki. Pies przeszedł 5 kroków.

ANALIZA


I Z programu usunęliśmy wszystkie, chwilowo niepotrzebne metody. ® W liniach 8 i 9 znajdują się deklaracje przeciążonych metod Ruch(). W linii 18, klasa Pies nadpisuje bezargumentową metodę Ruch (). W liniach 26-28 wywoływane są odpowiednie metody Ruch (). Wydruk wyjściowy stanowi informację o tym, co zostało wywołane.

Linia 29 została zakomentowana ponieważ powoduje błąd kompilacji. Jeśli klasa Pies nie nadpisałyby metody Ruch() to mogłaby wywołać metodę Ruch (int). Teraz, jeśli chcielibyśmy wykorzystać metodę z parametrem, musielibyśmy również ją nadpisać. Zwróć uwagę na analogię z konstruktorami. Jeżeli stworzysz jakikolwiek konstruktor to kompilator nie będzie już zapewniał konstruktora domyślnego.

Bardzo częstym błędem jest nieświadome ukrycie metod klasy bazowej przy próbie nadpisania ich. Przyczyną jest pominięcie słowa kluczowego const. const jest częścią sygnatury funkcji i pominięcie go zmienia sygnaturę powodując ukrycie funkcji zamiast jej nadpisania.

Wywołanie metody bazowej

Jeśli nadpisałeś metodę bazową to nadal istnieje możliwość wywołania nadpisanej funkcji. Należy w tym celu podać pełną nazwę metody łącznie z nazwą klasy bazowej. Oto przykład:

Ssak: -.Ruch ()

Możliwa jest również pewna ciekawa modyfikacja linii 29 ostatniego programu:

29:    fido.Ssak::Ruch(10);


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0032 16 Godzina 2 W linii 1 do programu dołączany jest plik iostream.h. Kompila
Poniedziałek (I) 11.15-12.45 (II) 13.00- 14.30 (III) 14.45-16.15 Wtorek (I) 14.00-15.30 (II)
Poznaj C++ w$ godziny0182 Zaawansowane referencje i wskaźniki 171 int PobierzWiek() const { return j
Kształty waz {reckich: 10. hyiria; 11. lotrofora: 12. lefces gaaukos; 13. psykter; 14. oiaockoe; 15.
img94 1 - 11 - 2 -Speaker R+ 12 -Speaker L+ 3 -Speaker R- 13 -Speaker L- 4-GND 14-A+ 5 -BAT+ 15
34 35 Str. 34 Rozdział IV Gambit królewski muende 1932) 10.Ag3 Se8 11.^2 &c8 12.c3 h5 13.Wb
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$ godziny0231 222 Godzina 15 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Poznaj C++ w$ godziny0066 Instrukcje i wyrażenia 51 11:    if (x > 10) 12:  &
Poznaj C++ w$ godziny0130 118 Godzina 8 11:    { 12:    lieznik++; 13:
CCF20090527007 Lp. DZIAŁ -maszyna lub urządzenie Nr maszyny, .■rządzenia GODZINY 1 2 3 4 5 6 7 8 9
Plan zajęć (I WET) na rok akademicki 2019/2020 (semestr zimowy) - 13 grup * Godzina 9 10 11 12 13
Poznaj C++ w$ godziny0227 218 Godzina 15 9:    cout « Tablic*[i] [j]« andl; 10:  
Poznaj C++ w$ godziny0010 Spis treści    ix 11    Referencje
Poznaj C++ w$ godziny0028 12 Godzina 1 Przepisz program dokładnie. Pamiętaj o wszystkich znakach. Np

więcej podobnych podstron