Praca z dziedziczeniem w C++

W tym samouczku będziemy rozmawiać dziedziczenie w C++, bardzo ciekawy temat, spójrzmy na prosty przykład. Dla osób korzystających z systemu Windows możesz pobrać IDE do programu, pomoże ci to skompilować i uruchomić programy, zostawiamy poniższy link:

DEVC ++

Tutaj będziemy używać Linuksa, a konkretnie Ubuntu, który ma już kompilator dla C++. Język C++, jak wszyscy zapewne wiedzą, pozwala na wielokrotne dziedziczenie, w przeciwieństwie do Javy, która pozwala tylko na proste dziedziczenie i jeśli chcemy czegoś podobnego, musimy ciągnąć interfejsy, w końcu jest mniej podatny na błędy.

Główny przykład, który pokażemy tutaj, aby zobaczyć dziedziczenie w C++, jest prosty, nie będziemy wchodzić w dziedziczenie wielokrotne, z wyjątkiem tego, że na końcu pokażemy błąd, na który możemy mieć wpływ.

1. Proste dziedziczenie w C++


Na początek pierwszy przykład, proste dziedziczenie, będziemy mieli klasę Zwierzę, która będzie naszą klasą bazową lub rodzicem oraz 2 klasy, które będą dziedziczyć, Pies który nie będzie miał żadnego kodu i Kot co doda nowy parametr do klasy nadrzędnej. Zobaczmy kod (jest krótki):
 #include używając przestrzeni nazw std; class Animal {prywatne: int wiek; public: Zwierzę (int a = 1) {wiek = a; }; int getAge () const {wiek powrotu;} void setAge (int a = 9) {wiek = a; }}; klasa Pies: publiczne Zwierzę {}; klasa Kot: publiczne Zwierzę {prywatne: ciężarek pływający; public: Kot (int a = 2, float w = 3.2): Zwierzę (a) {waga = w; } float getWeight () const {return weight;}}; int main () {Ps mastin; cout << "____PIES____" << endl; cout << "Przed:" << mastin.getAge () << endl; mastin.setAge (2); cout << "Po:" << mastin.getAge () << endl; Miauczenie kota (3, 4.1); cout << "____KOT____" << endl; cout << miau.getAge () << "" << miau.getWeight () << endl; } 
Zakładamy, że znasz już trochę C++, aby przejść dalej, aby zobaczyć problemy z dziedziczeniem, dlatego nie będziemy wyjaśniać części funkcji lub części publicznych i prywatnych. Do dziedziczenia z klasy mamy następującą składnię:
 klasa córka_klasa: publiczna klasa_rodzica
Więc w naszym przykładzie, aby stworzyć klasę Pies zastosowaliśmy:
 klasa Pies: publiczne zwierzę
Wskazuje, że Pies dziedziczy po Animal, wszystko co klasa Animal ma w swoich blokach publicznych lub chronionych możemy z niej skorzystać, jednak jeśli użyjemy bloku prywatnego otrzymamy błąd. Dobra klasa Pies jest pusty, więc nie ma większych trudności.

Jeśli pójdziemy na zajęcia Kot, mamy taką samą deklarację klasy jak poprzednio, poza tym widzimy, że dodaje nową zmienną waga, ta zmienna nie ma ani klasy Zwierzę, żaden Pies. Tutaj w konstruktorze klasy nazwaliśmy konstruktor klasy nadrzędnej, dlatego przekazujemy dane do zmiennej wiek, a także wypełniamy zmienną waga.

NotatkaWidać, że parametry, które przekazujemy do funkcji, mogą mieć wartość domyślną.

w Główny tworzymy obiekt klasy Pies, domyślnie zostawiamy wiek i pokazujemy go, następnie używamy funkcji ustaw wiek zmienić wiek i pokazać go na nowo. Na koniec tworzymy obiekt klasy Kot, a tym razem nie pozwalamy, aby zmienne miały wartość domyślną i przekazujemy je im przy tworzeniu obiektu, a żeby nie zmieniać ich pokazujemy.

Jeśli chcemy uruchom ten kod w terminalu linuksowym z g ++, wykonujemy następujące czynności:

 g++ -o test tesc.gcc
I poprowadzić to bardzo łatwo:
 ./test
Pokażemy przechwytywanie z kompilacją i wykonaniem małego kodu:

2. Dziedziczenie wielokrotne w C ++


Zobaczyć ich niebezpieczeństwa wielokrotnego dziedziczenia zostawimy bardzo mały kod:
 #include używając przestrzeni nazw std; class Animal {public: void spacer () {cout << "Walking in Animal" << endl; }}; class Mammal {public: void spacer () {cout << "Chodzenie w ssaku" << endl; }}; klasa Pies: public Animal, public Mammal {}; int main () {Pies pies; pies.spacer (); } 
Widzimy to Pies dziedziczy z Zwierzę Tak Ssak, a obie klasy pełnią tę samą funkcję iść, jeśli korzystam z normalnej funkcji jak w kodzie:
 pies.spacer ()
I kompilujemy, otrzymujemy następujący błąd:

Aby go rozwiązać, możemy użyć następującej składni, aby wywołać funkcję Zwierzę:

 pies.Zwierzę :: spacer ();
lub skorzystać z zajęć Ssak:
 pies.Mamifero :: spacer ();
I oczywiście najlepszym rozwiązaniem nie jest posiadanie 2 funkcji o tej samej nazwie, jeśli zamierzamy wykorzystać dziedziczenie wielokrotne, w tym programie jest to bardzo łatwe do rozwiązania, ale w przypadku dużej może to sprawić ból głowy.

Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave