Các bác ơi !
Mình hiện đang theo học OOP, mình vẫn chưa hiểu về phương thức tạo bản sao ! Các bạn có thể giảg thêm cho mình được kô, về "Các tạo pttl tạo bản sao, cách sử dụng, và công dụng của nó" ! thanks a lot !
PS : cho ví dụ cho dễ hiểu he các bác !
Các bác ơi !
mấy cái này thì bạn thử xem trong quyển lập trình c++ hướng đối tượng of Phạm Văn Ất xem , họ nói kỹ lắm
Copy constructor là một constructor có dạng
class C {
C(const C& aC) {} //đây là Copy constructor, tham số của nó luôn là const TênLớp&
}
Copy Constructor được gọi khi nào:
- Khi hàm được truyền vào tham trị (tham biến thì không)
VD
void func1(C aC) {} // khi gọi hàm func1 thì Copy Constructor của C được gọi
void func2(C& aC) {} // khi gọi hàm func2 thì Copy Constructor của C không được gọi
- Khi hàm được trả ra tham trị (tham biến thì không)
C func3() {} // khi gọi hàm func3 thì Copy Constructor của C được gọi
C& func4() {} // khi gọi hàm func4 thì Copy Constructor của C không được gọi
- Khi gán (chỉ nếu trong lớp đó không có toán tử gán)
VD
C aC1;
C aC2 = aC1; // gọi copy constructor nếu không định nghĩa toán tử =
- Khi copy
VD
C aC1;
C aC2(aC1); // gọi copy constructor
Công dụng của copy constructor thì đương nhiên là làm cho 2 đối tường giống hệt nhau, nếu có biến thành viên cấp phát động thì nên được copy cho nhau, không đơn thuần là sử dụng phép gán. Nếu không định nghĩa copy constructor thì 1 copy constructor mặc định sẽ được thay để gọi khi cần, constructor mặc định thì luôn sử dụng phép gán
VD
class C {
int x;
int *arr; //mảng động
C (const C& aC) //copy constructor
{
x = aC.x;
//arr = aC.arr; //không nên gán thế này vì 2 đối tượng sẽ dùng chung mảng động, mà nên sử dụng memcpy hoặc gán từng phần tử như bên dưới.
memcpy(arr, aC.arr, someOfBytes);
}
}
copy constructor như bác nguyentuan2 nói quá rõ rồi đó bài viết thật hay cám ơn bác nhiều !
thân bác !
Đã được chỉnh sửa lần cuối bởi huongit1984 : 14-01-2007 lúc 11:43 AM.
Ok, cám ơn bác nguyentuàn nhìu !