Oggetti di classe di copia
Sia l'operazione di assegnazione che l'operazione di inizializzazione provocano gli oggetti viene copiata.
assegnazione: Quando il valore dell'oggetto viene assegnato a un altro oggetto, il primo oggetto viene copiato nel secondo oggetto.Pertanto,
Point a, b; ... a = b;
determina il valore b venga copiato in a.
inizializzazione: L'inizializzazione si verifica quando un nuovo oggetto viene dichiarato, quando gli argomenti vengono passati alle funzioni per valore, o quando i valori restituiti da funzioni per valore.
È possibile definire la semantica “copy„ per oggetti di tipo classe.Ad esempio, si consideri il codice seguente:
TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;
Il codice potrebbe significare “la copia il contenuto di FILE1.DAT a FILE2.DAT„ oppure potrebbe indicare che “ignore FILE2.DAT e rendere a b la seconda handle a FILE1.DAT„. È necessario associare la semantica di copia appropriata per ciascuna classe, come illustrato di seguito.
Utilizzando l'operatore di assegnazione operator= con un riferimento alla classe digitare come tipo restituito e il parametro passato da const riferimento per ClassName& operator=(const ClassName& x);di esempio.
Utilizzando il costruttore di copia.Per ulteriori informazioni su costruttore di copia, vedere Regole per la dichiarazione dei costruttori.
Se non si dichiara un costruttore di copia, viene generato un costruttore di copia come membro automaticamente. Se non si dichiara un operatore di assegnazione di copia, il compilatore genera un operatore di assegnazione di copia come membro automaticamente. Dichiarando un costruttore di copia non elimina l'operatore di assegnazione di copia generato dal compilatore, o viceversa.Se si implementa uno, è consigliabile implementare anche altro è in modo che il significato di codice sia chiaro.
l'assegnazione di un membro è descritta in dettaglio in Assegnazione membro per membro e inizializzazione.
Il costruttore di copia accetta un argomento di tipo nome della classe**&**nome della classe, dove è il nome della classe per cui il costruttore viene definito.Ad esempio:
// spec1_copying_class_objects.cpp
class Window
{
public:
Window( const Window& ); // Declare copy constructor.
// ...
};
int main()
{
}
[!NOTA]
Scegliere il tipo di argomento nome della classe const& di un costruttore di copia appena possibile.Ciò impedisce al costruttore di copia di modificare involontariamente l'oggetto da cui viene copiato.Abilita la copia dagli oggetti const.