Freigeben über


Kopieren von Klassenobjekten

bewirken der Zuweisungsvorgang und der Initialisierungsvorgang Objekte kopiert werden.

  • Zuweisung: Wenn der ein Wert des Objekts in ein anderes Objekt zugewiesen wird, wird das erste Objekt auf den zweiten Objekt kopiert.Daher eignet sich

    Point a, b;
    ...
    a = b;
    

    verursacht, dass der Wert von b in a a kopiert wird.

  • Initialisierung: Initialisierung tritt auf, wenn ein neues Objekt deklariert wird, wenn Argumente an Funktionen als Wert übergeben werden oder wenn Werte von Funktionen als Wert zurückgegeben werden.

Sie können die Semantik der "Kopieren" für Objekte vom Typ Klasse definieren.Betrachten Sie beispielsweise den folgenden Code:

TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;

Der vorhergehende Code kann "Den Inhalt von FILE1.DAT auf FILE2.DAT kopieren" oder "FILE2.DAT ignorieren und b ein zweites Handle für FILE1.DAT erstellen" bedeuten. Sie müssen entsprechende Semantik zu kopierende jeder Klasse anfügen, wie folgt.

  • Durch die Verwendung des Zuweisungsoperators operator= zusammen mit einem Verweis auf den Klassentyp als dem Rückgabetyp und dem Parameter, der von const Verweis-für Beispiel ClassName& operator=(const ClassName& x); übergeben wird.

  • Durch die Verwendung des Kopierkonstruktors.Weitere Informationen zu den Kopierkonstruktor, finden Sie unter Regeln zum Deklarieren von Konstruktoren.

Wenn Sie keinen Kopierkonstruktor deklarieren, generiert der Compiler einen Member-mäßigen Kopierkonstruktor für Sie. Wenn Sie keinen Kopierzuweisungsoperator deklarieren, generiert der Compiler einen Member-mäßigen Kopierzuweisungsoperator für Sie. Das Deklarieren eines Kopierkonstruktors unterdrückt nicht den vom Compiler generierten Kopierzuweisungsoperator noch umgekehrt.Wenn Sie entweder ein implementieren, wird empfohlen, auch das andere implementieren, sodass die Bedeutung des Codes zu löschen.

Member-mäßige Zuweisung wird in Memberspezifische Zuweisung und Initialisierung behandelt.

Der Kopierkonstruktor übernimmt ein Argument des Typs Klassenname**&**Klassenname, wobei der Name der Klasse ist, für die der Konstruktor definiert ist.Beispiel:

// spec1_copying_class_objects.cpp
class Window
{
public:
    Window( const Window& ); // Declare copy constructor.
    // ...
};

int main()
{
}
HinweisHinweis

Legen Sie den Typ aus dem Argument const Klassenname& des Kopierkonstruktors, wann immer möglich.Dadurch wird verhindert, dass der Kopierkonstruktor unbeabsichtigt das Objekt ändert, aus dem kopiert wird.Es ermöglicht auch das Kopieren von const-Objekten.

Siehe auch

Referenz

Spezielle Memberfunktionen (C++)