Heim > Backend-Entwicklung > C++ > Wann können virtuelle C-Funktionen kovariante Rückgabetypen haben?

Wann können virtuelle C-Funktionen kovariante Rückgabetypen haben?

DDD
Freigeben: 2024-11-28 05:33:16
Original
605 Leute haben es durchsucht

When Can C   Virtual Functions Have Covariant Return Types?

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);
    }
};
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage