Video: Zeiger - (dynamische) Datenstrukturen 3 ● Gehe auf SIMPLECLUB.DE/GO & werde #EinserSchüler 2024
C ++ als Straddler unterstützt sowohl frühe als auch späte Bindung. Jede gegebene Programmiersprache kann entweder frühe oder späte Bindung basierend auf den Launen ihrer Entwickler unterstützen. Ältere Sprachen wie C neigen dazu, die frühe Bindung alleine zu unterstützen. Neue Sprachen wie Java und C # unterstützen nur die späte Bindung.
Sie werden überrascht sein, dass der Standard für C ++ eine frühe Bindung ist. Die Ausgabe des Programms OverloadOverride lautet wie folgt:
Wir sind in Student:: calcTuition Wir sind in Student:: calcTuition Drücken Sie die Eingabetaste, um fortzufahren …
Der Grund ist einfach, wenn auch etwas veraltet. Erstens muss C ++ in der Standardeinstellung so sehr wie C agieren, um die Aufwärtskompatibilität mit dem Vorgänger beizubehalten. Zweitens fügt der Polymorphismus jedem Funktionsaufruf sowohl hinsichtlich der Datenspeicherung als auch des Codes, der zum Ausführen des Anrufs erforderlich ist, einen geringen Overhead hinzu.
Die C ++ - Gründer hatten Bedenken, dass zusätzlicher Overhead als Grund dafür verwendet werden würde, C ++ nicht als Systemsprache der Wahl zu übernehmen, so dass sie die Vorabbindung effizienter gestalten konnten.
Um eine Memberfunktion polymorph zu machen, muss der Programmierer die Funktion mit dem C ++ - Schlüsselwort virtual, kennzeichnen, wie in der folgenden Modifikation der Deklaration in der OverloadOveride < Programm: Klasse Student {public: virtuelles void calcTuition () {cout << "wir sind in Student:: calcTuition" << endl;}};
Das Schlüsselwort
virtual , das C ++ mitteilt, dass calcTuition () eine polymorphe Elementfunktion ist. Das heißt, wenn Sie calcTuition () virtual deklarieren, bedeutet das, dass Aufrufe an ihn spät gebunden werden, wenn Zweifel bezüglich des Laufzeittyps des Objekts bestehen, mit dem calcTuition () aufgerufen wird.
OverloadOveride mit calcTuition () virtual deklariert ausführen, wird die folgende Ausgabe erzeugt: Wir sind in Student:: calcTuition Wir sind in GraduateStudent:: calcTuition Press Geben Sie hier ein, um fortzufahren …
Wenn Sie mit dem Debugger vertraut sind, der mit Ihrer C ++ - Umgebung geliefert wird, sollten Sie dieses Beispiel in nur einem Schritt ausführen. Es ist so cool, das Programm als Einzelschritt in Student zu sehen:: calcTuition () das erste Mal, dass fn () aufgerufen wird, aber in GraduateStudent:: calcTuition () im zweiten Aufruf. Polymorphismus kann man nicht wirklich schätzen, bevor man es versucht hat.