Was ist eine virtuelle Funktion?

Eine virtuelle Funktion ist eine in einer Superklasse definierte Funktion, die in einer Unterklasse vorhanden sein muss, damit diese Unterklasse eine vollständige Klassendefinition hat. Virtuelle Funktionen stützen sich auf ein objektorientiertes Programmierparadigma, das als virtueller Vererbung bezeichnet wird und das in C ++ am häufigsten mit dem Schlüsselwort "Virtual" zu sehen ist. Um eine virtuelle Funktion zu definieren, sind zwei Klassen erforderlich, eine Superklasse und eine Unterklasse. In der Superklasse wird die Funktion zuerst deklariert und möglicherweise definiert. In der Unterklasse wird die Funktion definiert - oder überschrieben, je nachdem, ob die Funktion in der Superklasse definiert wurde.

Die virtuelle Funktion kann auf zwei Arten definiert werden. Erstens kann es als Stummel definiert werden, in dem es einen leeren Körper hat und nichts tut. Zweitens könnte es als eine reine virtuelle Funktion definiert werden, bei der es in der Header -Datei der Superklasse als Null definiert ist.

Es gibt Vor- und Nachteile für beide Methoden. Die Definition einer Funktion als Stub stellt sicher, dass alle Unterklassen haIch habe eine Implementierung, auch wenn es nichts tut. Wenn man vergisst, die Funktion zu überschreiben und in einer Unterklasse ordnungsgemäß zu implementieren, scheinen keine Fehler oder Warnungen darauf hinzuweisen. Das Definieren einer reinen virtuellen Funktion hingegen erfordert, dass jede Unterklasse eine eigene Definition der Funktion hat, und Fehler werden angezeigt, wenn dies nicht der Fall ist.

virtuelle Funktionen unterliegen jedoch denselben Vererbungsregeln wie nicht virtuelle Funktionen. Daher erfordern die Vererbungshierarchien mit mehr als zwei Ebenen möglicherweise keine explizite Definitionen virtueller Funktionen. Zum Beispiel kann man eine Klasse A in Betracht ziehen, die eine virtuelle Funktion deklariert, die in Unterklasse B implementiert ist. Klasse B hat eine eigene Unterklasse. Klasse C. Klasse C erfordert keine explizite Definition der Funktion der Klasse A, da sie die Definition von Klasse B erbt.Oder es könnte die Funktion der Klasse B überschreiben und gleichzeitig aufrufen.

Bei der anderen Extremität müssen virtuelle Funktionen nicht in einer Unterklasse definiert werden, wenn sie in dieser Unterklasse virtuell erklärt werden. Zum Beispiel kann man eine Klasse A in Betracht ziehen, die eine virtuelle Funktion deklariert und zwei Unterklassen hat, B und C. Außerdem könnte man sich vorstellen, dass die Klasse B Unterklassen D und E und Unterklasse C Unterklassen F und G.

hat

Klassen B über G alle müssen die virtuelle Funktion der Klasse A irgendwie definiert haben. Wenn die Klasse B eine Implementierung der Funktion von A hat, müssen die Klassen D und E nicht erneuert werden. Vielleicht müssen die Unterklassen von C die Funktion von A implementieren, aber beide machen etwas anderes, sodass es nicht nützlich wäre, die Funktion in der Klasse C selbst zu definieren. In diesem Fall kann die Funktion in Klasse C virtuell deklariert werden, und eine Implementierung ist nicht erforderlich.

virtuelle Funktionen können entmutigend sein, zu lernen, aber wenn sie richtig verwendet werden, können sie Code -Duplikation reduzieren und Code viel einfacher zu verstehen.im Allgemeinen. Es gibt jedoch viele Fallstricke mit virtuellen Funktionen, insbesondere in Bezug auf mehrere Vererbung. In mehreren Vererbung ist es möglich, dass mehrdeutig definierte virtuelle Funktionen in Konflikt miteinander in Konflikt geraten, damit sie in diesem Zusammenhang mit Vorsicht verwendet werden.

ANDERE SPRACHEN

War dieser Artikel hilfreich? Danke für die Rückmeldung Danke für die Rückmeldung

Wie können wir helfen? Wie können wir helfen?