Heim >Backend-Entwicklung >C++ >Warum erben abgeleitete Klassen in C keine Konstruktoren und wie können wir das Problem beheben?
Im bereitgestellten Codeausschnitt beobachten wir einen Fehler beim Versuch, ein Objekt der Klasse B mit B *b = new zu initialisieren B(5); trotz des Vorhandenseins eines Konstruktors in der Basisklasse A. Dies wirft die Frage auf, warum in dieser nicht auf geerbte Konstruktoren zugegriffen werden kann Fall.
Der Schlüssel zum Verständnis dieses Problems liegt in den komplizierten Regeln der Konstruktorvererbung in C . Da es keine explizite Konstruktorvererbung gibt, erben abgeleitete Klassen nicht automatisch Konstruktoren von ihren Basisklassen. Dies war im C 03-Standard der Fall. Um eine Konstruktorvererbung zu erreichen, muss die abgeleitete Klasse explizit das Schlüsselwort using verwenden, wie im folgenden korrigierten Code zu sehen ist:
class A { public: explicit A(int x) {} }; class B: public A { using A::A; };
Mit dem Zusatz von using A::A; erbt Klasse B nun den Konstruktor von Klasse A, Behebung des Fehlers. Es ist wichtig zu beachten, dass diese Vererbung für alle Konstruktoren in der Basisklasse gilt und die abgeleitete Klasse nicht selektiv nur bestimmte Konstruktoren erben kann.
Wenn Ihr Compiler den C 11-Standard unterstützt, können Sie das Schlüsselwort using für den Konstruktor verwenden Nachlass. Im C 03-Standard wurden Konstruktoren jedoch nicht standardmäßig geerbt und mussten manuell in der abgeleiteten Klasse implementiert werden, indem der Basiskonstruktor aufgerufen wurde.
Für Basisklassen mit Vorlagen kann auch das Schlüsselwort using verwendet werden erben Sie Konstruktoren, wie in diesem Beispiel gezeigt:
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 vonWarum erben abgeleitete Klassen in C keine Konstruktoren und wie können wir das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!