C++

Dynamic Virtual

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Das Schlüsselwort "virtual" hilft Ihnen, generisch mit Pointern zu arbeiten und zu gewährleisten, dass die überschriebene Methode in der abgeleiteten Klasse ausgeführt wird.

Transkript

Ich zeige Ihnen jetzt was es mit virtuellen Methoden auf sich hat. Das ist nämlich ganz trickreich. Wir haben die Aufgabenstellung, dass ich von einer Basisklasse aus eigentlich auf die Methoden der davon abgeleiteten Klassen zugreifen möchte. Und das kann man eigentlich nur dynamisch machen, der Compiler muss dazu eine Struktur im Speicher einlegen zur Laufzeit, die Ihnen dann sagt wo was hingehört. Damit man eben mit Pointern arbeiten kann, die zur Basisklasse gehören, also jetzt zum Beispiel Fahtzeug, machen wir das mal für das Fahrzeug. Hier haben wir ja ganz normal die Klasse erstmal definiert, aber hier gibt es jetzt eine Besonderheit. Ich verwende jetzt hier den Begriff virtual void ausgabe Fahrzeug und sage ihm damit,dass es sich um eine viruelle Methode handelt. Diese virtuelle Methode, die bleibt nicht fest dieser Basisklasse sozusagen zugeordnet. Das Programm soll später entscheiden, welche Ausgabe nun tatsächlich verwendet wird. Wenn ich nämlich nachher ein Objekt habe, vom Typ Auto, dann möchte ich gerne, dass die Ausgabe hier vom Auto verwendet wird. Hier könnte man virtual auch davorschreiben, aber es genügt, wenn in der Basisklasse der Begriff virtuall davorsteht. Also die Ausgabe soll immer aufgerufen werden, auch wenn ich nachher ein Pointer der Basisklasse habe, der in Wirklichkeit eigentlich auf ein Auto zeigt oder bei einem Schiff entsprechend hätte ich gerne diese Ausgabe immer für einen Schiff. Nun, es ist nur dieses eine Schlüsselwort, was eigentlich unser Programmbeispiel von vorher komplett ändert. Ich habe jetzt hier mal c1, c2, c3 verschiedene Objekte definiert, die gebe ich hier noch ganz normal aus, das ist ja noch kein Geheimnis. Interessant wird es eigentlich hier bei diesem pgeneric Pointer vom Typ Fahrzeug. Wenn ich hier zuweise, c1 das ist hier kein Problem, weil hier habe ich eine Basisklasse, da muss er auch die Ausgaberoutine an dieser Stelle von der Basisklasse verwenden. Aber hier weise ich jetzt einen Pointer zu auf Auto, im Prinzip also gecastet auf CFahrzeug, ist aber vom Typ CAuto und die Ausgaberoutine soll mir jetzt eben nicht mehr die Ausgaberoutine des Fahrzeugs ansprechen, sondern die Ausgaberoutine des Autos und durch das Schlüsselwort virual wird es genau erreicht. Und das Gleiche passiert hier unten nochmal mit Fahrzeug. Wenn ich das Schiff nehme, dann hätte ich hier gerne die Ausgaberoutine von Schiff. Und so geht das natürlich immer, das ist klar wenn ich das direkt caste, aber das will ich ja genau vermeiden das möchte ich eigentlich gar nicht mehr haben. So jetzt starten wir das ganze mal und schauen uns das an wie das funktioniert. Und hier haben wir jetzt erstmal die drei direkten Ausgaben, Das Fahrzeug hier als Pointer ist auch klar, aber hier wird jetzt eben nicht Fahruzeug ausgegeben, sondern tatsächlich Auto und hier Schiff und na gut unten mit dem direkten Cast natürlich auch, das funktioniert natürlich nach wie vor. Also Sie sehen schon, Sie können hier relativ leicht durch virtual hier eine Methode virtualisieren. In der Praxis bedeutet es eben, dass der Compiler dafür eine dynamische Tabelle anlegt, die nachträglich eben geändert wird, wenn man da was reinschreibt, der muss jan sschließlich über den Pointer hier vorne zugreifen, er kennt also zu dem Zeitpunkt mit dem Pointer CFahrzeug, weiß aber, dass die Ausgaberoutine sich änern kann, und hier beim Anlegen wird sozusagen das entsprechend eingetragen, das ist ein sogenannter Funktionspointer, der intern verwendet wird zur Realisierung von solchen virtuellen Methoden. Ansonsten sind die eigentlich auch recht effizient,effizienter jedenfalls als wenn man mit einer Case-Anweisung alle Fälle abfragen würde.

C++

Machen Sie sich mit den einfachen Grundlagen zu C++ vertraut und lernen Sie anhand zahlreicher Übungs- und Codebeispiele die Klassenkonzepte, Prozeduren und Funktionen kennen.

9 Std. 3 min (143 Videos)
Derzeit sind keine Feedbacks vorhanden...

Video-Training auf DVD mit Bonusmagazin

+ Tutorial to go: Mit Videos für iPod, iPhone & Co.

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!