Kovariante Rückgabetypen in virtuellen C-Funktionen
In C ist es für geerbte Klassen möglich, virtuelle Funktionen mit unterschiedlichen Rückgabetypen zu implementieren. Diese Rückgabetypen müssen jedoch mit dem ursprünglichen Rückgabetyp kovariant sein.
Kovarianz bedeutet, dass der Rückgabetyp in der abgeleiteten Klasse mindestens so abgeleitet ist wie der Rückgabetyp in der Basisklasse. Wenn beispielsweise die Basisklassenfunktion einen Basiszeiger zurückgibt, kann die abgeleitete Klassenfunktion einen abgeleiteten Zeiger zurückgeben.
Dies ist zulässig, da jeder Zeiger auf ein abgeleitetes Klassenobjekt implizit in einen Zeiger auf eine Basisklasse konvertierbar ist Objekt. Daher kann ein Aufruf einer virtuellen Funktion in einer Basisklasse immer einen Zeiger auf ein Basisklassenobjekt zurückgeben, selbst wenn die Implementierung der abgeleiteten Klasse einen Zeiger auf ein abgeleitetes Klassenobjekt zurückgibt.
Betrachten Sie das folgende Beispiel:
class Base { public: virtual ~Base() {} virtual Base* clone() const = 0; }; class Derived: public Base { public: virtual Derived* clone() const { return new Derived(*this); } };
In diesem Beispiel definiert die Base-Klasse einen rein virtuellen Funktionsklon, der einen Base-Zeiger zurückgibt. In der Derived-Klasse wird die Klonfunktion überschrieben, um einen Derived-Zeiger zurückzugeben. Dies ist zulässig, da Derived eine abgeleitete Klasse von Base ist und ein Derived-Zeiger implizit in einen Base-Zeiger konvertiert werden kann.
Das obige ist der detaillierte Inhalt vonWann können virtuelle C-Funktionen kovariante Rückgabetypen haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!