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
Freigeben: 2024-12-21 07:35:10
Original
517 Leute haben es durchsucht

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">public: 
    explicit A(int x) {}
Nach dem Login kopieren

};

class B: public A
{
};

int main(void)
{

B *b = new B(5);
delete b;
Nach dem Login kopieren

}

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

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

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

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!

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