Skip to main content

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 in C ++ am häufigsten mit dem virtuellen Schlüsselwort 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 und mdash;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 Superclass -Header -Datei als Null definiert ist.

Beide Methoden haben Vor- und Nachteile.Das Definieren einer Funktion als Stub stellt sicher, dass alle Unterklassen eine gewisse Implementierung haben, auch wenn sie nichts tut.Wenn man vergisst, die Funktion zu überschreiben und in einer Unterklasse ordnungsgemäß zu implementieren, scheinen jedoch 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, sodass Vererbungshierarchien mit mehr als zwei Ebenen möglicherweise keine explizite Definitionen virtueller Funktionen erfordern.Zum Beispiel kann man eine Klasse A in Betracht ziehen, die eine virtuelle Funktion deklariert, die in Unterklasse B implementiert istDie Definition aus der Klasse B könnte bei Bedarf die Funktion der Klasse C überschreiben, oder sie könnte die Funktion der Klasse BS überschreiben und gleichzeitig aufrufen.

Im anderen Extrem 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. Darüber hinaus könnte man sich vorstellen, dass die Klasse B Unterklassen D und E und Unterklasse C Unterklassen F und G.

Klassen hatB bis G alle müssen eine Klasse als virtuelle Funktion haben, die irgendwie definiert ist.Wenn die Klasse B eine Implementierung von AS -Funktion hat, müssen die Klassen D und E nicht erneuert werden.Vielleicht müssen CS -Unterklassen als Funktion 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 der Klasse C virtuell erklärt werden, und eine Implementierung ist nicht erforderlich.

Virtuelle Funktionen können entmutigend sein, um zu lernen, aber wenn sie ordnungsgemäß verwendet werden, können sie die Code -Duplikation reduzieren und Code im Allgemeinen leichter zu verstehen. Im Allgemeinen leichter zu verstehen.Es gibt jedoch viele Fallstricke mit virtuellen Funktionen, insbesondere in Bezug auf mehrere Vererbung.Bei 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 sollten.