Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++ Grundkurs

Klassen-Templates vererben

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
C++ ermöglicht es, sämtliche Klassen sowie Klassen-Templates in allen verfügbaren Kombinationen voneinander zu vererben.
03:27

Transkript

In dieser Lektion will ich auf das Vererben von Klassen-Templates eingehen. Klassen und Klassen-Templates können Sie in allen beliebigen Kombinationen voneinander vererben. Es gibt aber eine Besonderheit, auf die ich explizit eingehen will. Wenn Sie eine Klasse oder ein Klassen-Template von einem Klassen-Template ableiten, sind nicht automatisch alle Attribute der Basisklasse oder alle Methoden der Basisklasse in dieser abgeleiteten Klasse vorhanden. Das heißt, Sie bekommen eine Fehler- meldung, wenn Sie, wie in diesem konkreten Fall hier, versuchen func aufzurufen. Das zeige ich Ihnen jetzt konkret am Beispiel. Ich habe hier eine Basisklasse, ist aktuell ein Klassen-Template. Diese Basisklasse hat eine Methode func und von dieser Basisklasse leite ich ab Derived. Diese Klasse ist auch über T parametrisiert. Ist also ein Klassen-Template. In dieser Klasse habe ich eine Funktion func2. Diese Funktion func2 oder auch Methode func2 ruft die Methode func auf. Der Compiler weiß aber in diesem Fall in keinster Weise, dass diese Funktion func die Funktion func aus Base sein soll. Sondern versucht diese Funktion func als freie Funktion aufzulösen und es kann, muss aber nicht gut gehen. Auf jeden Fall tut das Programm nicht das, was Sie erwarten. Um dieses Problem zu lösen, gibt es drei Lösungen in C++. Erstens Sie können explizit sagen, dass Sie eine Funktion aufrufen wollen, die im Scope Ihres Objekts ist. Durch this-func() statt func rufen Sie explizit eine Funktion auf, die in diesem Scope enthalten ist. In diesem Fall wird func verwendet. Zweitens durch die using-Deklaration, using Base::func sagen Sie explizit, ich will eine Funktion benützen, die sich im Scope von Base befindet. Durch das wird automatisch func verwendet. Drittens Sie können natürlich explizit die Basisklasse referenzieren durch Base. Alle drei Möglichkeiten, anders ausgedrückt alle drei Lösungen, zeigen ich Ihnen jetzt am Beispiel. Ich habe hier eine Klasse mit drei Methoden func1, func2 und func3. Die erste Methode gibt func1 aus, die zweite func2 und die dritte func3. Von dieser Klasse leite ich jetzt Derived ab, Klassen-Templates. Was mache ich da drinnen? Ich rufe die Methode callAllBaseFunctions auf und ich will func1 aufrufen, func2 aufrufen und func3 aufrufen. Ich tue das in drei verschiedene Art und Weisen. Erstens mit this-func1 beziehe ich mich auf den Scope dieses Objekts, indem ich mich an den this-Pinter binde. Mit func2 adressiere ich die Methode func2 des Klassen-Templates Base, weil ich hier using Base::func2 hingeschrieben habe. Durch diese using-Deklaration löse ich das lösen auf. Zum Schluss noch func3. func3, da beziehe ich mich explizit auf Base, damit ist es auch eindeutig. Was noch fehlt, ist nun das Programm laufen zu lassen und zu sehen func1, func2, func3. In dieser Lektion habe ich Ihnen das Ableiten von Klassen-Templates vorgestellt. Sie können Klassen und Klassen-Templates in beliebigen Kombinationen voneinander ableiten. Sie müssen aber beachten, dass in abgeleiteten Klassen oder Klassen-Templates von Klassen-Templates nicht automatisch die Attribute und Methoden der Basisklasse zur Verfügung stehen. Diese müssen Sie explizit angeben. Ich habe Ihnen dazu drei Möglichkeiten gezeigt über den this-Pointer, über die using-Deklaration oder darüber, dass Sie explizit die Basisklasse angeben.

C++ Grundkurs

Steigen Sie in die mächtige Programmiersprache C++ ein und lernen Sie dabei alle wichtigen Funktionen mit Anwendungsbeispielen kennen.

8 Std. 14 min (147 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!