Konstruktor kopieren
In C++ wird eine Funktion mit demselben Namen wie der Klassenname, deren formale Parameter Referenztypen von Objekten dieser Klasse sind , als Kopierkonstruktor bezeichnet. Das System generiert automatisch einen, wenn wir ihn nicht aktiv definieren. Führen Sie entsprechende einfache Zuweisungen zwischen zwei Objektmitgliedern durch, die zum Initialisieren eines Objekts verwendet werden, z. B. in der folgenden Situation:
#include<iostream>usingnamespacestd;#definePI3.1415classCircle{private:doubleR;public:Circle(doubleR);Circle(Circle&A);doublearea();doublegirth();};Circle::Circle(doubleR){cout<<Constructor <<endl;this->R=R;}Circle::Circle(Circle&A){cout<<CopyConstructor<<endl;this->R=AR;}doubleCircle::area(){returnPI*R*R;} doubleCircle::girth(){return2*PI*R;}intmain(){CircleA(5);CircleB(A);return0;}
In diesem Beispiel wird eine Circle-Klasse definiert und ein Konstruktor mit Parametern bzw. ein Kopierkonstruktor definiert. Anschließend wird das A-Objekt in der Hauptfunktion definiert, der Anfangswert übergeben und der Konstruktor mit Parametern aufgerufen. Und definieren Sie das B-Objekt und initialisieren Sie das B-Objekt über das A-Objekt. Die Laufergebnisse sind wie folgt:
Das zum ersten Mal definierte A-Objekt ruft den Konstruktor mit Parametern auf, und das zweite B-Objekt wird über das A-Objekt initialisiert, sodass der Kopierkonstruktor aufgerufen wird.
Bitte probieren Sie es auch auf Ihrem Computer aus.
Möglicherweise haben Sie Fragen. Zu Beginn haben wir erwähnt, dass ein Kopierkonstruktor automatisch für uns generiert wird, wenn wir ihn nicht aktiv definieren. Warum müssen wir ihn also selbst definieren? Das liegt daran, dass der Standard-Kopierkonstruktor nur einfache Zuweisungen ausführt. Dabei handelt es sich um tiefes Kopieren und flaches Kopieren . Wir werden es Ihnen im nächsten Abschnitt ausführlich vorstellen.