Konstruktoren erben: Fehler- und Vererbungsregeln verstehen
Beim Versuch, einen Konstruktor von einer Basisklasse zu erben, ohne ihn explizit in der abgeleiteten Klasse neu zu definieren Warum führt die Klasse, wie im bereitgestellten Codeausschnitt dargestellt, zu einer Kompilierung? Fehler?
In C vor C 11 wurden Konstruktoren nicht von abgeleiteten Klassen geerbt. Um den Konstruktor der Basisklasse auszuführen, musste er explizit im Konstruktor der abgeleiteten Klasse aufgerufen werden. Aus diesem Grund wird im angegebenen Code die folgende Fehlermeldung angezeigt:
main.cpp:13: error: no matching function for call to ‘B::B(int)’ main.cpp:8: note: candidates are: B::B() main.cpp:8: note: B::B(const B&)
Um Konstruktoren in C 11 und höher zu erben, wird das Schlüsselwort using eingeführt. Dieses Schlüsselwort kann verwendet werden, um alle Konstruktoren der Basisklasse gemeinsam zu erben.
class A { public: explicit A(int x) {} }; class B: public A { using A::A; // Inherits all constructors of A };
Mit diesem Ansatz können Sie alle Konstruktoren der Basisklasse in einer Codezeile erben. Es ist jedoch wichtig zu beachten, dass eine selektive Vererbung bestimmter Konstruktoren mit dieser Methode nicht möglich ist. Um eine selektive Vererbung zu erreichen, müssen Sie einzelne Konstruktoren manuell in die abgeleitete Klasse schreiben und bei Bedarf den Basisklassenkonstruktor aufrufen.
Das obige ist der detaillierte Inhalt vonWarum erfordern geerbte Konstruktoren in C vor C 11 eine explizite Definition?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!