Effettivamente le cose stanno come dici, all'incirca.
Quando tu scrivi:
codice:
scimmie T = visu();
Viene invocato il costruttore di copia.
Invece con questo procedimento:
codice:
scimmie T;
T = visu();
Prima T viene inizializzato ai valori di default richiamando il costruttore senza argomenti, quindi viene effettuata un'assegnazione. Per risolvere il problema devi ricorrere all'overload degli operatori.