Heim > Backend-Entwicklung > C++ > Warum erfordern geerbte Konstruktoren in C vor C 11 eine explizite Definition?

Warum erfordern geerbte Konstruktoren in C vor C 11 eine explizite Definition?

DDD
Freigeben: 2025-01-03 12:49:39
Original
308 Leute haben es durchsucht

Why Do Inherited Constructors in C   Require Explicit Definition Before C  11?

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&)
Nach dem Login kopieren

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
};
Nach dem Login kopieren

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage