Wie Polymorphismus funktioniert in C ++

Als Zaun straddler unterstützt C ++ sowohl frühe als auch späte Bindung. Jede gegebene Programmiersprache kann entweder früh unterstützen oder späte Bindung beruht auf den Launen seiner Entwickler. Ältere Sprachen wie C neigen dazu, die frühe Bindung allein 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 ++ frühe Bindung ist. Der Ausgang des OverloadOverride programmieren, wie es erscheint, ist wie folgt:

Wir sind in der Studenten :: calcTuitionWe're in Studenten :: calcTuitionPress eingeben, um fortzufahren ...

Der Grund ist einfach, wenn auch ein wenig veraltet. Erstens hat C ++, so viel wie C wie möglich standardmäßig zu handeln Aufwärtskompatibilität mit seinem Vorgänger zu behalten. Zweitens fügt Polymorphismus eine geringe Menge an Overhead zu jedem Funktionsaufruf sowohl in Bezug auf die Datenspeicherung und Code benötigt, um den Anruf durchzuführen.

Die Gründer von C ++ waren besorgt, dass jeder zusätzliche Aufwand als Grund verwendet werden würde, nicht C ++ zu verabschieden, wie die Sprache des Systems der Wahl, so machten sie desto effizienter die Standard frühe Bindung.

Um eine Memberfunktion polymorphe machen, muss der Programmierer Flagge die Funktion mit dem C ++ Schlüsselwort virtuell, wie in der folgenden Änderung der Erklärung in der gezeigt OverloadOveride Programm:

Klasse Schüler {public: virtual void calcTuition () {cout lt; lt; "Wir sind in der Studenten :: calcTuition" lt; lt; Endl -}} -

Das Schlüsselwort virtuell das sagt, dass C ++ calcTuition () ist ein polymorpher Memberfunktion. Das heißt, erklärt calcTuition () virtuelle Mittel, die sie anruft, wird spät gebunden werden, wenn es Zweifel an der Laufzeittyp des Objekts, mit dem calcTuition () wird genannt.

die Ausführung der OverloadOveride Programm mit calcTuition () erklärt virtuellen erzeugt die folgende Ausgabe:

Wir sind in der Studenten :: calcTuitionWe're in Graduatestudent :: calcTuitionPress eingeben, um fortzufahren ...

Wenn Sie mit dem Debugger bequem sind, die mit dem C ++ Umgebung kommt, sollten Sie wirklich Einzelschritt durch dieses Beispiel. Es ist so cool, das Programm Einzelschritt in zu sehen Student :: calcTuition () das erste Mal, dass fn () genannt wird, aber in :: CalcTuition Graduatestudent () auf den zweiten Anruf. Sie können nicht wirklich zu schätzen Polymorphismus, bis Sie haben es probiert.

Sie müssen die Funktion virtuellen nur in der Basisklasse zu erklären. Das # 147-virtualness # 148- wird automatisch in die Unterklasse durch unten. Manchmal jedoch folgen Programmierer die Codierungsstandard deklarieren die Funktion virtuellen überall (virtuell).

Menü