Was ist eine virtuelle Funktion?

Eine virtuelle Funktion ist eine Funktion, in superclass definiert, die anwesend sein müssen in einer Unterklasse, damit diese Unterklasse eine komplette Kategoriendefinition hat. Virtuelle Funktionen beruhen auf einem Paradigma der objektorientierten Programmierung, das virtuelle Erbschaft genannt, die am allgemeinsten ist - gesehen in C++ using das „virtuelle“ Schlüsselwort. Zu eine virtuelle Funktion zu definieren, sind zwei Kategorien notwendig, superclass und eine Unterklasse um Die superclass ist, wo die Funktion zuerst erklärt, und vielleicht definiert. Die Unterklasse ist, wo die Funktion definiert - oder aufgehoben, abhängig von, ob die Funktion in den superclass definiert.

Die virtuelle Funktion kann in einer von zwei Möglichkeiten definiert werden. Zuerst kann sie als Stummel definiert werden, in dem sie einen leeren Körper hat und nichts tut. Zweitens könnte sie als reine virtuelle Funktion definiert werden, in der sie in der Include-Datei der superclasss definiert als NULL.

Es gibt Vorteile und Nachteile zu beiden Methodenlehren. Das Definieren einer Funktion als Stummel garantiert, dass alle Unterklassen irgendeine Implementierung von ihr haben, selbst wenn sie nichts tut. Wenn man vergisst, die Funktion aufzuheben und sie in einer Unterklasse richtig einführen, jedoch, scheinen keine Störungen oder Warnungen, dieses heraus zu zeigen. Das Definieren einer reinen virtuellen Funktion erfordert einerseits jede Unterklasse, seine eigene Definition der Funktion zu haben, und Störungen erscheinen wenn das nicht der Fall ist.

Virtuelle Funktionen sind jedoch abhängig von den gleichen Erbschaftrichtlinien wie nicht-virtuelle Funktionen, also konnten Erbschafthierarchien mit mehr als zwei Niveaus ausdrückliche Definitionen der virtuellen Funktionen nicht erfordern. Z.B. kann man eine Kategorie A, die eine virtuelle Funktion erklärt, die Unterklasse B. in der Kategorie, die, B eingeführt eine Unterklasse von seinen Selbst, hat Kategorie C. Kategorie betrachten C nicht eine ausdrückliche Definition von der Funktion der Kategorie a erfordert, weil es die Definition von der Kategorie B. wenn notwendig übernimmt, Kategorie C könnte Funktion der Kategorie b aufheben, oder es könnte Funktion der Kategorie b beim sie auch benennen aufheben.

An den anderen extremen, virtuellen Funktionen müssen nicht in einer Unterklasse definiert werden, wenn sie in dieser Unterklasse erklärtes virtuelles sind. Z.B. kann man eine Kategorie A betrachten, die eine virtuelle Funktion erklärt und zwei Unterklassen, B und C. zusätzlich hat, man könnte vorstellen, dass Kategorie B Unterklassen D und E hat und Unterklasse C Unterklassen F und G. hat.

Kategorien B bis G alles müssen die virtuelle Funktion der Kategorie a haben, die irgendwie definiert. Wenn Kategorie B eine Implementierung der Funktion a hat, benötigen Kategorien D und E sie nicht nochmals gemacht zu werden. Möglicherweise müssen Unterklassen c Funktion a einführen, aber sie beide tun unterschiedliches etwas, also, die Funktion in Kategorie C selbst sein zu definieren nicht nützlich. In diesem Fall kann die Funktion in Kategorie C erklärtes virtuelles sein, und eine Implementierung ist nicht notwendig.

Virtuelle Funktionen können erschreckend sein zu erlernen, aber, wenn sie richtig verwendet, können sie Codeverdopplung verringern und Code viel einfacher bilden, im Allgemeinen zu verstehen. Es gibt viele Gefahren mit virtuellen Funktionen jedoch besonders hinsichtlich der mehrfachen Erbschaft. In der mehrfachen Erbschaft ist es möglich für vieldeutig definierte virtuelle Funktionen, mit einander zu widersprechen, also sollten sie mit Vorsicht in diesem Zusammenhang benutzt werden.