vuoi
o PayPal
tutte le volte che vuoi
COSTRUTTORE DI COPIA
Per capire fino in fondo che cosa è un costruttore di copia, dobbiamo preoccuparci prima di comprendere che cos'è un costruttore. Quando un oggetto, sia esso istanza di un tipo di dato nativo oppure astratto viene creato, si dice comunemente che quell'oggetto è stato costruito. La costruzione di un oggetto può avvenire in momenti diversi in base alla categoria cui l'oggetto stesso appartiene. In ogni caso, durante la sua creazione, spesso si rende necessario effettuare delle operazioni specifiche. Infatti, se gli oggetti sono istanze di una classe, il C++ mette a disposizione un mezzo molto potente che consente di definire le operazioni effettuabili sull'oggetto stesso, funzioni che il programma riconosce come tali, a partire dalla sua creazione. Questi prendono il nome di costruttori e hanno l'onere di inizializzare i membri e di mettere a disposizione tutte le risorse necessarie per la
creazione dell'oggetto. Generalmente i costruttori devono sottostare alle seguenti regole:
- devono avere lo stesso nome della classe;
- per essi non deve essere specificato il tipo di ritorno (nemmeno void);
- possono ammettere argomenti e argomenti di default, i costruttori senza argomenti sono detti costruttori di default;
- possono esistere più costruttori utilizzando il meccanismo di overloading, il compilatore riconosce automaticamente quale invocare in base agli argomenti;
- devono essere dichiarati nella parte pubblica della classe, poiché sono sempre richiamati dall'esterno della classe alla quale appartengono.
I costruttori non sono obbligatori, infatti nel caso in cui non ne venga specificato uno, il compilatore automaticamente ne crea uno di default avente corpo nullo, tuttavia è sempre buona norma definirne uno. Se invece la classe possiede almeno un costruttore con argomenti, allora il C++ non mette a disposizione alcun
costruttore didefault e perciò questo va definito esplicitamente come metodo pubblico all’interno della classe. Infine in presenza dicostruttori con più argomenti, essi non vengono invocati automaticamente e pertanto la creazione di un oggetto devecontenere la chiamata al proprio costruttore.class myClass { public: myClass(); //costruttore di default myClass(T myVar); //costruttore con un argomento myClass(T myVar, T myVar2 = 0); //costruttore con due argomenti, uno di default myClass(const myClass&); //costruttore di copia ... private: T var; T var2; };
myClass::myClass() { //Costruttore di default, se ha corpo nullo, è lo stesso che il compilatore mette a //disposizione della classe, qualora essa ne risulti sprovvista. Può servire //all’inizializzazione di variabili membro della classe stessa. var2 = 0; } myClass::myClass(T myVar) { //Costruttore con argomenti, sfrutta il meccanismo della sovrapposizione dei metodi //(overloading) e ... }
consente l'inizializzazione di variabili. var = myVar;}
......
COSTRUTTORE DI COPIA
I costruttori di copia sono particolari costruttori, che vengono eseguiti quando un oggetto è creato, appunto, per copia. Questo avviene:
- alla definizione di un oggetto contestualmente alla sua creazione, mediante un oggetto esistente dello stesso tipo;
- passando per valore un argomento ad una funzione;
- restituendo per valore un oggetto mediante una funzione.