Nel libro Deitel C++ ("C++ 11 per programmatori", p.286), non v'è un esempio di:Perché il passaggio per riferimento coinvolge un costruttore di copie?
class Date { ... }
class Employee {
public:
Employee(const string &, const string &, const Date &, const Date &);
private:
string firstName;
string lastName;
const Date birthDate;
const Date hireDate;
}
Employee::Employee(const string &first, const string &last,
const Date &dateOfBirth, const Data &dateOfHire)
: firstName(first),
lastName(last),
birthDate(dateOfBirth),
hireDate(dateOfHire) { };
Il libro dice l'inizializzatore membro come birthDate(dateOfBirth)
invocato costruttore di copia Date
della classe. Sono confuso sul perché copiare il costruttore? Ho pensato che l'intero punto di "passare per riferimento" è quello di evitare la copia dell'oggetto?
Se lo faccio:
Date birth(7,24, 1959);
Date hire(2,12, 1988);
Employer staff("bob", "blue", birth, hire);
Quanti Data oggetti fa il sistema ha ora, 2 o 4? (Due creati all'inizio, due sono creati dal costruttore di copie)
così, ci sono infatti 2 nuovo oggetto Date creato da l'atto di costruttore di copia, così come nuovo oggetto di std: sono create stringa, sto capendo che hai ragione?grazie – Oliver
In questo caso, le istanze dell'oggetto vengono visualizzate come membri della classe Employee e sono semplicemente _initialized_ (dai loro costruttori di copia) sul posto. Ma logicamente, sì, tutti questi membri sono inizializzati per diventare copie dei rispettivi inizializzatori ** e ** hanno appena iniziato la vita, assegnati come parte dell'oggetto Dipendente. ** Un impiegato ha una stringa, una stringa, una data, una data **, per così dire – sehe