Heim >Backend-Entwicklung >C++ >Warum erbt meine abgeleitete Klasse nicht den Konstruktor meiner Basisklasse in C?

Warum erbt meine abgeleitete Klasse nicht den Konstruktor meiner Basisklasse in C?

Barbara Streisand
Barbara StreisandOriginal
2024-12-21 07:35:10557Durchsuche

Why Doesn't My Derived Class Inherit My Base Class's Constructor in C  ?

Konstruktoren vererben: Ein Rätsel

Wenn Konstruktoren nicht wie erwartet vererbt werden, kann das rätselhaft sein. Betrachten Sie den folgenden Codeausschnitt:

class A<br>{</p>
<pre class="brush:php;toolbar:false">public: 
    explicit A(int x) {}

};

class B: public A
{
};

int main(void)
{

B *b = new B(5);
delete b;

}

Dieser Code generiert Kompilierungsfehler:

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

Unerwartet, Klasse B erbt den Konstruktor nicht von Klasse A.

Enthüllung der Lösung

In C 03 wurden Konstruktoren nicht automatisch geerbt. Um einen Konstruktor zu erben, musste er manuell vom Konstruktor der abgeleiteten Klasse aufgerufen werden. Mit der Konstruktorvererbung von C 11 wurde diese Einschränkung jedoch gemildert.

Nutzung der Konstruktorvererbung

Mit C 11 ermöglicht die Verwendung des Schlüsselworts using die Vererbung aller Konstruktoren aus der Basisklasse. Fügen Sie dazu einfach die folgende Zeile zur abgeleiteten Klasse hinzu:

using A::A; // Inherits all constructors from class A

Durch die Verwendung dieser Technik werden alle Konstruktoren aus der Basisklasse in die abgeleitete Klasse vererbt.

Ausnahmebehandlung

Es ist wichtig zu beachten, dass eine abgeleitete Klasse, die manuell einen Konstruktor definiert, keine Konstruktoren von der Basis erbt Klasse. In solchen Fällen müssen alle Konstruktoren manuell definiert werden und den Basisklassenkonstruktor bei Bedarf explizit aufrufen.

Basisklassen mit Vorlagen

Für Basisklassen mit Vorlagen gilt ein ähnlicher Ansatz beschäftigt. Um alle Konstruktoren von einer Basisklasse mit Vorlagen in eine abgeleitete Klasse zu erben, verwenden Sie die folgende Syntax:

using vector<T>::vector; /// Takes all vector's constructors

Dieser Ansatz stellt sicher, dass alle Konstruktoren von der Basisklasse in die abgeleitete Klasse vererbt werden.

Das obige ist der detaillierte Inhalt vonWarum erbt meine abgeleitete Klasse nicht den Konstruktor meiner Basisklasse in C?. 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