un riferimento altro non è che un puntatore ad un oggetto.. es:
se ho una funzione che prende in input un int* allora farò così:
codice:
void foo(int* intero)
la chiamerò con:
codice:
foo(&i); <- qui passo un riferimento al mio intero alla funzione.. questo riferimento, nella funzione foo, diventa un puntatore al mio intero..
il costruttore di copia si comporta proprio al contrario..
si aspetta un riferimento per non averne una copia locale (un oggetto passato per valore viene copiato localmente alla funzione e non viene modificato)
quindi:
codice:
oggetto(const oggetto& o); <- costruttore di copia
chiamato con:
codice:
oggetto ogg(o); <- "o" è un oggetto esistente
però attenzione queste cose dovresti studiartele meglio sul/sui libro/i