5.1 Allgemeines
br /
Eine virtuelle Funktion wird in der Basisklasse mit dem Schlüsselwort virtual deklariert und in den abgeleiteten Klassen wieder definiert. Diese "Wiederdefinition" überschreibt die der Basisklasse. Generell kann man sagen, daß die Deklaration in der Basisklasse als "Platzhalter" für eine generelle Funktion fungiert, die in den abgeleiteten Klassen erst wirklich implementiert werden, weil diese unterschiedlich Aufgaben haben.
Sehr nützlich sind virtuelle Funktionen beim Erstellen von Containern, die unterschiedliche Objekte enthalten, aber alle einen gewissen Satz von Standardfunktionalität haben soll. Ein Beispiel wäre dafür die Basisklasse Zeichenobjekt, von dem die Klassen Kreis und Rechteck abgeleitet sind. Nun wird eine Liste von Zeichenobjekten erstellt, und ein Aufruf der Funktion draw() der Basisklasse soll dann je nachdem, ob das Objekt ein Kreis oder ein Rechteck ist, richtig gezeichnet werden.
Das wichtige bei virtuellen Funktionen ist ihr Verhalten, wenn sie via Zeiger aufgerufen werden. Wenn ein Basisklassenzeiger auf ein abgeleitetes Objekt zeigt, das eine virtuelle Funktion enthält, führt C++ die richtige Version dieser Funktion aus.
Virtuelle Funktionen können auch vererbt werden, d.h. sie können in mehreren Ebenen der Vererbungshierarchie immer wieder überschrieben werden.
Außerdem ist zu beachten, daß die virtuelle Funktion der Basisklasse ausgeführt wird, wenn diese in einer abgeleiteten Klasse nicht überschrieben wurde.
Beispiel:
class base
{
public:
virtual void vfunc() { cout |