Trong Deitel C++ cuốn sách ("C++ 11 cho lập trình viên", p.286), có một ví dụ về:Tại sao truyền qua tham chiếu liên quan đến một hàm tạo bản sao?
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) { };
Cuốn sách nói initializer thành viên như birthDate(dateOfBirth)
gọi constructor sao chép Date
lớp của. Tôi bối rối là tại sao sao chép constructor? Tôi nghĩ rằng toàn bộ điểm "vượt qua bằng cách tham khảo" là để tránh các đối tượng sao chép?
Nếu tôi làm:
Date birth(7,24, 1959);
Date hire(2,12, 1988);
Employer staff("bob", "blue", birth, hire);
bao nhiêu ngày đối tượng nào hệ thống có bây giờ, 2 hoặc 4? (Hai được tạo khi bắt đầu, hai được tạo bởi hàm khởi tạo sao chép)
như vậy, có thực sự là 2 đối tượng ngày mới được tạo ra bởi các hành động của constructor sao chép, cũng giống như đối tượng mới của std: string được tạo ra, Tôi hiểu bạn đúng không?thx – Oliver
Trong trường hợp này, các cá thể đối tượng xuất hiện dưới dạng các thành viên của lớp Employee và chúng chỉ đơn thuần là _initialized_ (bởi các hàm tạo bản sao của chúng) tại chỗ. Nhưng về mặt logic, có, tất cả các thành viên này được khởi tạo để trở thành bản sao của các trình khởi tạo tương ứng của chúng ** và ** chúng vừa mới bắt đầu cuộc sống, được phân bổ như một phần của đối tượng Employee. ** Một nhân viên có một chuỗi, chuỗi, Ngày, Ngày **, do đó, để nói – sehe