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
DDDOriginal
2025-01-03 12:49:39306Durchsuche

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&)

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!

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