4. Hàm thiết lập (constructor) và hàm huỷ bỏ (destructor)
4.4.1 Các tình huống sử dụng hàm thiết lập sao chép
Xét các chỉ thị khai báo và khởi tạo giá trị cho một biến nguyên:
int p; int x = p;
Chỉ thị thứ hai khai báo một biến nguyên x và gán cho nó giá trị của biến nguyên p. Tơng tự, ta cũng có thể khai báo một đối tợng và gán cho nó nội dung của một đối tợng cùng lớp đã tồn tại trớc đó. Chẳng hạn:
point p(2,3);/*giả thiết lớp point có hàm thiết lập hai tham số*/ point q =p;
Dĩ nhiên hai đối tợng, mới q và cũ p có cùng nội dung. Khi một đối tợng đợc tạo ra (khai báo) thì một hàm thiết lập của lớp tơng ứng sẽ đợc gọi. Hàm thiết lập đợc gọi khi khai báo và khởi tạo nội dung một đối tợng thông qua một đối tợng khác, gọi là hàm thiết lập sao chép. Nhiệm vụ của hàm thiết lập sao chép là tạo ra một đối tợng giống hệt một đối tợng đã có. Thoạt nhìn hàm thiết lập sao chép có vẻ thực hiện các công việc giống nh phép gán, nh- ng nếu để ý sẽ thấy giữa chúng có chút ít khác biệt; phép gán thực hiện việc sao chép nội dung từ đối tợng này sang đối tợng khác, do vậy cả hai đối tợng trong phép gán đều đã tồn tại:
point p(2,3);//giả thiết lớp point có hàm thiết lập hai tham số point q;//giả thiết lớp point có hàm thiết lập không tham số q = p;
Ngợc lại, hàm thiết lập thực hiện đồng thời hai nhiệm vụ: tạo đối tợng và sao chép nội dung từ một đối tợng đã có sang đối tợng mới tạo ra đó.
Ngoài tình huống trên đây, còn có hai trờng hợp cần dùng hàm thiết lập sao chép: truyền đối tợng cho hàm bằng tham trị hoặc hàm trả về một đối t- ợng nhằm tạo một đối tợng giống hệt một đối tợng cùng lớp đã có trớc đó. Trong phần sau chúng ta sẽ có ví dụ minh hoạ cho các trình bày này.