C++ Grundkurs

Abstrakte Basisklassen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Abstrakte Basisklassen dienen als Schnittstelle für eine Klassenhierarchie. Die Programmiersprache verbietet es, diese Klassen zu initialisieren.
04:25

Transkript

In dieser Lektion will ich Ihnen abstrakte Basisklassen in C++ vorstellen. Abstrakte Basisklassen sind Klassen, die eine oder mehrere rein virtuelle Methoden enthalten. Was ist eine virtuelle Methode? Es ist eine Methode, die virtuell deklariert ist und an die Klassendeklaration =0 angehängt wird. Das sehen Sie hier. Die Methode "extimateReturn" ist virtuell deklariert und an die Klassendeklaration =0 angehängt. Was ist der Sinn von abstrakten Basisklassen? Abstrakte Basisklassen werden gerne als Schnittstellendefinition, englisch Interfaces, benutzt, um Klassenhierarchien vorzugeben, die abgeleiteten Klassen vorschreiben, welche Methoden sie zu implementieren haben. Diese Punkte werden klarer, wenn ich Ihnen die Regeln ein bisschen genauer erläutere. Eine Klasse, die rein virtuelle Methoden enthält, kann nicht instanziiert werden. Das ist also eine abstrakte Basisklasse. Die gibt nur ein Interface vor. Eine abgeleitete Klasse von dieser abstrakten Basisklasse muss Definitionen für alle rein virtuellen Methoden bereitstellen, um instanziiert werden zu können. Eine rein virtuelle Methode kann in einer Klasse definiert werden, die als rein virtuell deklariert ist. Diese Aussage ist besonders. Das heißt, auch wenn Sie eine Methode als rein virtuell deklarieren, können Sie in dieser Klasse in dieser abstrakten Basisklasse eine Definition für diese Methode angeben. Das bewirkt, dass die Klasse nicht instanziiert werden kann, sie aber bereits eine Implementierung für diese rein virtuelle Methode besitzt. Eine Besonderheit gibt es beim Destruktor. Wenn der Destruktor einer Klasse als rein virtuell deklariert ist, muss trotzdem eine Definition dieser Methode in derselben Klasse angegeben werden. Hier ist es also verbindlich, was hier oben nur als Option genannt wird. Das ist ein beliebtes Idiom in C++, meine Klasse zur abstrakten Basisklasse zu erklären. Man erklärt also den Destruktor als rein virtuell. Diese Regel zeige ich Ihnen jetzt in der Anwendung. Zuerst zu dem virtuellen Destruktor. Der besitzt einen rein virtuellen Destruktor, eben daher virtual steht und hier =0. Trotzdem muss ich hier eine Definition des rein virtuellen Destruktors angeben. Erst jetzt kann ich eine konkrete Klasse, in diesem Fall heißt sie wirklich Concret von meiner abstrakten Basisklasse ableiten und, das ist das Entscheidende, hier unten instanziieren. Nun zum zweiten Beispiel. Das ist ein bisschen aufwendiger. Ich habe eine Klasse HumanBeing und von der leite ich eine Klasse Man ab. HumanBeing soll einen Namen besitzen. Da verwende ich eine Variable N und initialisiere damit die Instanz "Name". Was mich interessiert, ist, von welchem Geschlecht ist das HumanBeing. Diese Methode erkläre ich als rein virtuell. Da gebe ich sozusagen das Interface vor. "Virtuell und =0". Jetzt leite ich einen konkrete Klasse für die HumanBeing ab. Ein Man besitzt den gleichen Konstruktor wie ein HumanBeing. Ich hätte auch "using HumanBeing" verwenden können, dadurch wird der HumanBeing den Konstruktor an Man vererben. Jetzt muss ich die rein virtuelle Methode implementieren und das mache ich dadurch, dass ich diesmal kein virtual verwende und =0 natürlich auch nicht und ich sage, das Geschlecht von Man ist natürlich männlich und das gebe ich auf der Kommandozeile dann hier unten aus. Dann habe ich auch hier noch eine Frau. Die gibt natürlich "female" aus. Das Beispiel hier haben wir schon gesehen. Wir kommen hier gleich zum Mann und zur Frau. Ein Mann, der heißt Schmidt, eine Frau, die heißt Huber. Jetzt kann ich von "schmidt.getSex()" rausgeben und von "huber.getSex()" rausgeben. Wenn ich das jetzt übersetze und laufen lasse, kommt das erwartete Ergebnis raus. "Schmidt created". "Huber created". Schmidt besitzt Geschlecht männlich. Huber besitzt Geschlecht weiblich. Was passiert aber nun, wenn ich die abstrakten Basisklassen einkommentiere? Jetzt erwarten wir uns natürlich vom Compiler eine Fehlermeldung. Und genau das tut er auch. Sie sehen, Zeile 53 cannot declare variable "abstract" to be of abstract type "Abstract". Damit will er mir sagen, dass diese Klasse hier abstrakt ist und er von daher die Instanz hier nicht erzeugen kann. Das Gleiche gilt für die Zeile 56, HumanBeing ist auch abstrakt, daher kann er keine Instanz vom Typ HumanBeing erzeugen. In dieser Lektion habe ich Ihnen abstrakte Basisklassen vorgestellt. Abstrakte Basisklassen werden gern verwendet, um Interfaces für Klassenhierarchien vorzugeben. Das heißt, Sie geben der Basisklasse in der abstrakten Basisklasse vor, welche Methoden zu implementieren sind. In abgeleiteten Klassen müssen diese dann tatsächlich implementiert werden.

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!