Heim > Backend-Entwicklung > C++ > Kann eine abgeleitete Klasse eine virtuelle Funktion mit einem anderen Rückgabetyp in C überschreiben?

Kann eine abgeleitete Klasse eine virtuelle Funktion mit einem anderen Rückgabetyp in C überschreiben?

Susan Sarandon
Freigeben: 2024-12-11 08:35:11
Original
713 Leute haben es durchsucht

Can a Derived Class Override a Virtual Function with a Different Return Type in C  ?

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage