Heim > Backend-Entwicklung > C++ > Wie kann ich Konstruktoren in C erben?

Wie kann ich Konstruktoren in C erben?

Linda Hamilton
Freigeben: 2024-12-25 15:30:10
Original
638 Leute haben es durchsucht

How Can I Inherit Constructors in C  ?

Konstruktoren erben

Das von Ihnen bereitgestellte Code-Snippet:

class A
{
    public:
        explicit A(int x) {}
};

class B: public A
{
};

int main(void)
{
    B *b = new B(5);
    delete b;
}
Nach dem Login kopieren

erzeugt Fehler beim Kompilieren mit GCC, weil es fehlt ein passender Konstruktor für B(int). Während Sie vielleicht erwarten, dass B den Konstruktor von A erbt, ist dies in C standardmäßig nicht der Fall.

In C 11 und höher wurde eine neue Funktion namens Konstruktorvererbung using using eingeführt. Durch Hinzufügen von using A::A; Innerhalb der Klasse B können Sie alle Konstruktoren von A explizit erben.

class A
{
    public:
        explicit A(int x) {}
};

class B: public A
{
     using A::A;
};
Nach dem Login kopieren

Die Konstruktorvererbung ist jedoch ein Alles-oder-Nichts-Konzept. Sie können nicht selektiv nur bestimmte Konstruktoren erben. Wenn Sie dies versuchen, müssen Sie die gewünschten Konstruktoren manuell definieren und den Basiskonstruktor von jedem von ihnen explizit aufrufen.

In C 03 und früher wurde die Konstruktorvererbung nicht unterstützt. Konstruktoren mussten manuell geerbt werden, indem der Basiskonstruktor in jedem abgeleiteten Klassenkonstruktor einzeln aufgerufen wurde.

Für Basisklassen mit Vorlagen können Sie die Vorlagensyntax verwenden, um alle Konstruktoren zu erben. Zum Beispiel:

template<class T>
class my_vector : public vector<T> {
    public:
    using vector<T>::vector; ///Takes all vector's constructors
    /* */
};
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Konstruktoren in C erben?. 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