Objets de classe de copie
L'exécution d'assignation et l'exécution d'initialisation entraînent des objets d'être copiés.
Assignation: Lorsqu'une valeur de l'objet est assigné à un autre objet, le premier objet est copié dans le deuxième objet.Par conséquent,
Point a, b; ... a = b;
provoque la valeur d' b d'être copié dans a.
initialisation: L'initialisation se produit lorsqu'un objet est déclaré, lorsque les arguments sont passés aux fonctions par valeur, ou lorsque des valeurs sont retournées par les fonctions par valeur.
Vous pouvez définir la sémantique de « copier » pour les objets de type de classe.Par exemple, considérez ce code :
TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;
Le code précédent peut signifier « copier le contenu de FILE1.DAT à FILE2.DAT » ou à cela peut signifier que « ignorer FILE2.DAT et faites de b un deuxième handle vers FILE1.DAT ». Vous devez joindre la sémantique de copie appropriée à chaque classe, comme suit.
À l'aide de l'opérateur d'assignation operator= avec une référence à la classe tapez comme type de retour et paramètre passé par const référence- pour l'exemple ClassName& operator=(const ClassName& x);.
En utilisant le constructeur de copie.Pour plus d'informations sur le constructeur de copie, consultez Règles de déclaration des constructeurs.
Si vous ne déclarez pas de constructeur de copie, le compilateur génère un constructeur de copie en ce qui concerne le membre pour vous. Si vous ne déclarez pas un opérateur d'assignation de copie, le compilateur génère un opérateur d'assignation de copie en ce qui concerne le membre pour vous. La déclaration d'un constructeur de copie ne supprime pas l'opérateur d'assignation de copie généré par le compilateur, ou vice versa.Si vous implémentez soit un, il est recommandé d'implémenter également l'autre afin que la signification du code soit claire.
l'assignation en ce qui concerne le membre est abordé plus en détail dans Assignation et initialisation de Memberwise.
Le constructeur de copie prend un argument de type nom de classe**&**, où nom de classe est le nom de la classe pour laquelle le constructeur est défini.Par exemple :
// spec1_copying_class_objects.cpp
class Window
{
public:
Window( const Window& ); // Declare copy constructor.
// ...
};
int main()
{
}
[!REMARQUE]
Définissez le type de l'argument nom de classe const& du constructeur de copie chaque fois que possible.Cela empêché le constructeur de copie de modifier accidentellement l'objet dont il copie.Il permet également la copie des objets de const .