Virtueller Funktionsrückgabetyp in C
Frage:
Kann eine geerbte Klasse a implementieren? virtuelle Funktion mit einem anderen Rückgabetyp ohne Verwendung einer Vorlage als zurück?
Antwort:
In bestimmten Fällen ja. Es ist zulässig, dass eine abgeleitete Klasse eine virtuelle Funktion mit einem anderen Rückgabetyp überschreibt, vorausgesetzt, dass der Rückgabetyp mit dem ursprünglichen Rückgabetyp kovariant ist. Kovarianz bedeutet, dass der Rückgabetyp der abgeleiteten Funktion ein Untertyp des Rückgabetyps der Basisfunktion ist.
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 Basisklasse eine rein virtuelle Funktion namens clone, die eine Base* zurückgibt. Die Derived-Klasse überschreibt diese virtuelle Funktion und gibt einen Derived* zurück. Auch wenn sich der Rückgabetyp von der Basisklasse unterscheidet, ist dies gültig, da Derived* ein Untertyp von Base* ist.
Im Allgemeinen wird der Rückgabetyp einer Funktion nicht als Teil ihrer Signatur betrachtet. Solange der Rückgabetyp kovariant ist, können Sie eine Mitgliedsfunktion mit jedem beliebigen Rückgabetyp überschreiben.
Das obige ist der detaillierte Inhalt vonKann eine abgeleitete Klasse eine virtuelle Funktion mit einem anderen Rückgabetyp in C überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!