2012-01-30 54 views
5

In un costruttore di copie perché gli argomenti devono avere valori predefiniti associati? Cosa succede se non ci sono valori predefiniti associati a loro e più di un argomento è fornito nel costruttore?parametri costruttore copia

Ad esempio:

X(const X& copy_from_me, int = 10); 

ha un valore di default per l'int, ma questo:

X(const X& copy_from_me, int); 

non lo fa. Cosa succede in questo secondo caso?

http://en.wikipedia.org/wiki/Copy_constructor

+0

Cosa intendi? – kennytm

+0

X (const X e copy_from_me, int = 10); cosa succede se scrivo X (const X e copy_from_me, int); – haris

+1

+1 per la domanda interessante, dovresti fare un po 'più di impegno nella presentazione la prossima volta però :) –

risposta

9

Un costruttore di copia richiede sempre un parametro, riferimento al tipo per cui appartiene, ci forse altri parametri ma must hanno valori predefiniti.

Un costruttore di copia è chiamato come funzione di copia e lo scopo del costruttore di copie è di creare un oggetto di un tipo utilizzando un oggetto dello stesso tipo come base per la creazione del nuovo tipo.

specificare la norma è che il costruttore di copia essere del tipo:

T(const &T obj); 

Questo permette in sostanza creazione di oggetti temporanei durante le funzioni di chiamare per valore o di ritorno oggetti del tipo per valore.
Questa sintassi facilita la creazione di un oggetto nuovo come:

T obj1(obj2);  <--------- Direct Initialization 
T obj1 = obj2;  <--------- Copy Initialization 

Se gli argomenti aggiuntivi trasferiti al costruttore di copia non sarebbe mandato ad avere valori di default, allora la costruzione di oggetti utilizzando la sintassi di cui sopra non sarebbe possibile .
Da qui la condizione di rigorosa,
ci forse altri parametri per un costruttore di copia ma hanno must hanno valori di default.

9

Quando viene invocato un costruttore di copia, l'unica cosa che è garantita per essere disponibile è un riferimento a un'istanza della stessa classe. Se il costruttore di copia accetta argomenti oltre questo riferimento richiesto, tali argomenti devono avere valori predefiniti.

Diciamo che abbiamo un costruttore con la seguente firma:

X(const X&, int); 

Questo non può essere utilizzato come un costruttore di copia a causa del secondo argomento. Per esempio:

X x1; 
X x2(x1); 

Come sarebbe il compilatore utilizzare il costruttore sopra per x2? Non può

D'altra parte, il seguente può essere usato come un costruttore di copia:

X(const X&, int = 0); 
+0

+1 per più di un solo rivestimento! – ezdazuzena

1

Un costruttore di copia deve essere richiamabile con solo un oggetto del tipo da copiare:

Thing t1;  // default constructor 
Thing t2(t1); // copy constructor 

Se ci sono argomenti extra senza valori predefiniti, il costruttore non può essere chiamato così, quindi non è un costruttore di copie.

3

Un costruttore di copie ha un parametro che è un riferimento al tipo che viene copiato.

È può ha parametri aggiuntivi, se questi hanno valori predefiniti. Se non hanno valori predefiniti, semplicemente non è un costruttore di copie.

Problemi correlati