C ++ wielokrotne dziedzictwo

C ++ wielokrotne dziedzictwo
Dziedziczenie to proces ulepszania i rozszerzania istniejących klas bez powodowania żadnej zmiany w nich. Powoduje to hierarchiczną relację między klasami. Dziedziczenie w języku programowania C ++ jest uzyskane w 5 głównych typach. Które są:
  • Pojedyncze dziedzictwo
  • Wiele dziedzictwa
  • Hierarchiczne dziedzictwo
  • Dziedziczenie wielopoziomowe
  • Hybrydowe dziedziczenie

Tutaj naszym tematem dyskusji jest wiele dziedziczeń.

Wiele dziedziczeń

Wielokrotne dziedziczenie występuje, gdy więcej niż jedna klasa działa jako klasa nadrzędna. W języku programowania C ++ możemy wyprowadzić klasę z klasy podstawowej, ale także możemy wyprowadzić klasę z klas, które są również pochodzące z innej klasy podstawowej. Nazywamy tego rodzaju dziedzictwo wieloma dziedzictwami. Podczas tego procesu występują również niektóre problemy; Są one wyjaśnione później w przewodniku.

Cel dziedziczenia

Dziedziczenie jest jednym z przydatnych i ważnych podejść OOP (programowanie obiektowe). Głównym celem stosowania dziedziczenia w OOP lub C ++ jest umożliwienie użytkownikowi ponownego użycia kodu źródłowego. Zamiast pisać ten sam kod kilka razy, możemy po prostu użyć dziedzictwa, aby odziedziczyć właściwości klasy podstawowej do klasy dzieci. Zmniejsza to również złożoność kodu źródłowego.

Składnia wielu dziedziczeń to:

Klasa 1
;
Klasa 2: public 1
;
Klasa 3: public 2
;

Aby odziedziczyć dowolną klasę, nazwa klasy dziecięcej jest zapisywana po lewej stronie, podczas gdy klasa rodzica jest zapisana po prawej stronie, a jest to oddzielone przez okrężnicę. W powyższej składni klasa 2 pochodzi z klasy 1, a klasa 3 pochodzi z klasy 2.

Wdrożenie wielokrotnego dziedziczenia

Przykład 1

Ten przykład jest próbką użycia dziedziczenia, ponieważ wiele dziedziczeń zawiera dziecko z dwojem rodziców. Więc tutaj klasa C to klasa dzieci, podczas gdy klasa A i klasa B są klasami rodziców. Każda klasa zawiera konstruktor, który wyświetli komunikat za każdym razem, gdy tworzy obiekt klasy. Korzystanie z biblioteki iostream pomaga w deklarowaniu CIN, funkcjonalność Cout. Obie klasy rodziców są zadeklarowane w jakikolwiek sposób, ale jednocześnie deklarując klasę dzieci, musimy wspomnieć o obu klasach rodziców odziedziczonych po klasie dzieci. Tutaj należy pamiętać o kolejności obu klas. Klasa ogłoszona jako pierwsza musi być wspomniana ostatnia.

Na przykład, w danym przykładzie, klasa A jest utworzona najpierw w kodzie źródłowym, który należy wymienić po B, a klasa B zostanie wspomniana jako pierwsza.

Klasa C: Publiczne B, publiczne A

Utworzymy obiekt tylko dla klasy dziecięcej w programie głównym, jak w procesie dziedziczenia obiekt klasy dzieci automatycznie uzyskuje dostęp do klasy nadrzędnej. Teraz zapisz plik za pomocą '.Rozszerzenie C ', skompiluj kod za pomocą kompilatora G ++. „-O” jest wykorzystywane do zapisania wyjścia pliku.

$ g ++ -o multi -multi.C
$ ./wielo

Po pomyślnym wykonaniu odpowiedź zostanie wyświetlona. Widać, że konstruktor klasy B zostanie wykonany najpierw tylko z powodu wymaganej kolejności, chociaż został zadeklarowany później, wówczas wykonany jest konstruktor klasy A, a na końcu sama klasa dziecka zostanie wykonana.

Przykład 2

Oto przykład wielu dziedzińców, w których „lalka” klasy dzieci zawiera dwoje rodziców, zabawkę i pluszę. Te klasy są zadeklarowane w taki sam sposób, jak w ostatnim przykładzie. Każdy konstruktor jest tworzony dla obu klas nadrzędnych. Trzecia klasa, klasa dziecięca, jest tylko zadeklarowana, ale jej konstruktor nie został stworzony; jest tylko deklaracja. Tutaj nakaz deklaracji klasy rodzicielskiej jest zmieniany, ponieważ zabawka klasowa jest pierwsza, musi zostać wspomniana później, ale w momencie ogłoszenia klasy dzieci jest wspomniana jako pierwsza; Podobnie klasa Plushtoy jest później ogłoszona również po zabawie klasowej.

Podczas tworzenia obiektu konstruktory klas nadrzędnych zostaną wykonane w zależności od wymienionego zamówienia podczas deklarowania klasy dzieci.

Teraz wykonaj kod; Zobaczysz, że konstruktor zabawki nadrzędnej jest najpierw wykonywany, a następnie wykonany jest konstruktor klasy „Plushtoy”.

Przykład 3

Problem z diamentem występuje w sytuacji, gdy dwoje rodziców (nadklasa) ma wspólną klasę podstawową. Na przykład Child C ma dwoje rodziców, A i B, a oba należą do jednej klasy bazowej D. Tak więc Child Class C będzie pośrednio zawiera dwie kopie klasy D, co prowadzi do dwuznaczności. Ten problem został wyjaśniony za pomocą kodu źródłowego C ++.

Osoba klasowa jest tworzona jako klasa podstawowa i ma konstruktor do wyświetlania wiadomości. Utworzono kolejny wykładowca klasy, który jest dzieckiem „osoby” klasy podstawowej i ma konstruktora w części publicznej klasy. Podobnie jak wydział, utworzono również student klasy, który dziedziczy po osobach z klasy rodzicielskiej.

Wydział i uczniowie stają się rodzicami nad klasą w obu zajęciach, gdy wynika z nich klasa TA. Ta klasa dziecięca TA jest deklarowana przez imiona obu klas nadrzędnych.

Klasa TA: Wydział publiczny: Student publiczny

To tworzy diament; Dwie klasy dziedziczą jedną klasę, podczas gdy pojedyncza klasa jest dziedziczona po tych dwóch klasach. Tak więc pośrednio klasa dziecięca będzie zawierać dane z klasy podstawowej jej rodziców.

Tworzenie obiektów zainicjuje wszystkie konstruktory klas opisanych powyżej.

Po uruchomieniu programu zobaczysz, że konstruktor klas wydziałowych zostanie wykonany jako pierwszy, ponieważ zamówienie było to, że został wspomniany jako pierwszy, deklarując klasę dzieci. Tak więc klasa wydziałowa najpierw wyświetli wiadomość klasą osoby, a następnie jej wiadomość; Podobnie klasa uczniów ponownie wydrukuje klasę osoby najpierw, a potem jej przesłanie. A na koniec wyświetlany jest komunikat klasy dzieci.

Jeśli jakikolwiek proces lub operacja zostanie zadeklarowana w klasie podstawowej, zostanie on dwukrotnie skopiowany. Spowoduje to dwuznaczność.

Aby usunąć ten problem, istnieje rozwiązanie. Słowo kluczowe „wirtualne” jest używane w tym aspekcie. Korzystanie z wirtualnego słowa kluczowego z klasą nadrzędną, wykładowcami i uczeń uniknie tworzenia dwóch kopii klasy podstawowej. Jest to stosowane do przykładu wyświetlonego poniżej.

Pozostały kod jest taki sam. Będzie to działać, aby konstruktor klasy podstawowej (osoba) była domyślnie wywoływana po utworzeniu obiektu. To wyeliminuje powielanie tego samego wiadomości lub dowolnej operacji.

Teraz wykonamy kod, aby zobaczyć wyniki. Konstruktor klasy podstawowej jest wykonywany tylko jeden czas.

Wniosek

„Wielokrotne dziedziczenie C ++” zawiera podstawowe wyjaśnienie dziedziczenia i zawiera je w kodzie. Niektóre podstawowe przykłady są zaimplementowane w C ++, aby wyjaśnić działanie wielu dziedziczeń. Ten przewodnik zawiera kilka poważnych problemów z dziedzictwem, takimi jak problem z diamentami. Jest szczegółowo opisany, a także rozwiązanie jest również podświetlone. Mamy nadzieję, że wysiłek ten będzie źródłem pełnej wiedzy dla nowych użytkowników.