Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Esercizio 1
Esercizio 2
può essere molto pesante perchè implica la copia di ciascun membro della classe.
Al contrario il passaggio della referenza
funzione(Classe& oggetto);
è più efficiente perchè indica solo l'indirizzo di memoria dove l'oggetto è immagazzinato.
Al tempo stesso però permette la modifica dell'oggetto passato !
Se si vuole fare in modo che l'argomento non possa essere modificato si deve usare la keyword
const
funzione(const Classe& oggetto);
Se non è definito il compilatore crea per default una copia bit a bit, cioè ogni dato membro
viene copiato. Il costruttore di copia viene invocato quando:
• inizializzazione esplicita
Classe obj2;
Classe obj1(obj2);
// equivalentemente: Classe obj1 = obj2;
Se le variabili membri della classe sono variabili statiche non vi è alcun problema: le versioni
default sono sufficienti.
Se invece all'interno dei membri della classe c'e' un vettore allocato dinamicamente (il membro è il
puntatore):
• il distruttore default distrugge il puntatore (cioè la variabile che contiene l'indirizzo di
memoria) ma non la zona di memoria allocata;
• il costruttore di copia crea un copia che condivide la stessa zona di memoria per la variabile
allocata dinamicamente (non è una vera copia).
• l'operatore di assegnazione copia l'indirizzo di memoria (i due oggetti condividono la stessa
area di memoria)
Esercizio 2 (vettore a N dimensioni) (facoltativo)
Creare un programma che legga i dati contenuti in punti3d.dat (vettori 3d) ed utilizzando la classe
così definita trovi:
• i due vettori più collineari, cioè con θ minore (cosθ=v_1*v_2/(|v_1||v_2|))
Attenzione: quando si alloca dinamicamente un array di oggetti per ciascuno di essi viene chiamato
il costruttore default (quello senza argomenti, aggiungetelo alla classe). Per cui se volete allocare un
array di N vettori a m componenti utilizzando un costruttore diverso da quello default dovete creare
un array di puntatori ad oggetto ed allocare poi ogni oggetto tramite il puntatore.