Heim >Backend-Entwicklung >C++ >Wie kann ich Konstruktoren in C erben?
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!