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

Wie kann ich Konstruktoren in C erben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-25 15:30:10607Durchsuche

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;
}

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;
};

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
    /* */
};

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!

Stellungnahme:
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