// Hàm tạo (hàm thiết lập)
+Hàm tạo được coi là phương thức đặc biệt trong lớp dùng để tạo dụng đối tượng mới .
Hãy nhớ rằng sau khi khai báo đối tương : Ten_class doituong; thì chương trình sẽ cấp phát
bộ nhớ cho đối tượng rồi sau đó gọi hàm tạo dùng để làm các công việc như gán thuộc tính
hay thức hiện một công viêc (lệnh) cụ thể nào đó .
+Phân biệt hàm tạo và các phương thức bình thường :
* Khác nhau :
- hàm tạo bắt buộc phải có tên trùng với tên của lớp .
- Không khai báo kiểu cho hàm tạo
- hàm tạo không có kiểu trả về .
Vd : Class Ten_class{
public :
void Ten_lop();//Sai
Ten_lop(); //Đúng
};
*Giống nhau :
- Hàm tạo có thể được cài đặt bên trong hoặc bên ngoài class
- Hàm tạo có thể có đối truyền vào
- Trong một lớp có thể có nhiều hàm tạo (cùng tên nhưng khác bộ đối).
** Có một điều chú ý là hàm tạo luôn để public.
Vd:
Class Ten_class{
private :
int x,y,z;
public :
Ten_class(); // không dối
Ten_class(int n,int m ,int k = 5) ; // có đối mặc định k = 5.(xem lại phần giá trị ngầm định của tham số)
};
Ten_class :: Ten_class(){cout << "Chào các bạn đến với C++" << endl;};
Ten_class :: Ten_class(int n ,int m,int k=5){x = n ;y=m;z=k};
//Ten_class :: Ten_class(){this->x = n ; this->y = m ; (*this).z = k};
Ten_class dt1,dt2(2,5),dt3(5,6,0);
đối tượng dt1 gọi hàm khởi tạo không tham số hay chương trình thực hiện lệnh cout << "Chào các bạn đến với C++" << endl;
dt2 gọi hàm có tham số và thực hiện lệnh gán dt2.x = 2 ;dt2.y = 5; dt2.z =5 ;
dt3 gọi hàm có tham số và thực hiện lệnh gán dt3.x = 2 ;dt3.y = 6; dt3.z =0 ;
+ Chú ý :
- Khi khai báo một biến đối tượng có thể dùng tham số để khởi gán thuộc tính cho đối tượng
- Khi khai báo mảng đối tượng không thể dùng tham số để khởi gán
- Câu lệnh khai báo biến đối tượng gọi tới hàm tạo một lần
- Câu lệnh khai báo mảng có n đối tượng gọi tới hàm n lần
** Với các hàm có đối kiểu lớp thì đối chỉ xem là tham số 'hình thức' vì vậy sẽ không tạo
ĐỐI TƯỢNG MỚI do đó sẽ KHÔNG GỌI hàm tạo
Trong trường hợp class không có hàm tạo thì khi khai báo chương trình cấp phát bộ nhớ cho đối
tượng và gọi hàm tạo mặc định hàm này không có đối và không làm gì cả : hamtao(){};
Trong trường hợp có ít nhất một hàm tạo khi khai báo đối tượng chương trình cấp phát bộ
nhớ cho đối tượng sau đó gọi đến hàm tạo CẦN gọi nếu không thấy hàm nào thỏa mãn chương trình
sẽ báo lỗi .
Những lỗi phát sinh trong quá trình sử dụng hàm tạo :
- Chúng tao không khai báo hàm tạo không đối nhưng sử dụng nó.
- Chúng tao vừa khai báo hàm tạo không đối vừa khai báo hàm tạo có đối nhưng trong hàm
tạo có đối những đối ta để giá trị mặc định vd :
hamtao(){cout << "Chao cac ban. ";};
hamtao(int x=0; int y=1){....};
int main(){Ten_class dt;}
Lúc này chương trình sẽ không biết gọi hàm tạo nào vì cả 2 hàm tạo đều thỏa mãn
+Hàm tạo được coi là phương thức đặc biệt trong lớp dùng để tạo dụng đối tượng mới .
Hãy nhớ rằng sau khi khai báo đối tương : Ten_class doituong; thì chương trình sẽ cấp phát
bộ nhớ cho đối tượng rồi sau đó gọi hàm tạo dùng để làm các công việc như gán thuộc tính
hay thức hiện một công viêc (lệnh) cụ thể nào đó .
+Phân biệt hàm tạo và các phương thức bình thường :
* Khác nhau :
- hàm tạo bắt buộc phải có tên trùng với tên của lớp .
- Không khai báo kiểu cho hàm tạo
- hàm tạo không có kiểu trả về .
Vd : Class Ten_class{
public :
void Ten_lop();//Sai
Ten_lop(); //Đúng
};
*Giống nhau :
- Hàm tạo có thể được cài đặt bên trong hoặc bên ngoài class
- Hàm tạo có thể có đối truyền vào
- Trong một lớp có thể có nhiều hàm tạo (cùng tên nhưng khác bộ đối).
** Có một điều chú ý là hàm tạo luôn để public.
Vd:
Class Ten_class{
private :
int x,y,z;
public :
Ten_class(); // không dối
Ten_class(int n,int m ,int k = 5) ; // có đối mặc định k = 5.(xem lại phần giá trị ngầm định của tham số)
};
Ten_class :: Ten_class(){cout << "Chào các bạn đến với C++" << endl;};
Ten_class :: Ten_class(int n ,int m,int k=5){x = n ;y=m;z=k};
//Ten_class :: Ten_class(){this->x = n ; this->y = m ; (*this).z = k};
Ten_class dt1,dt2(2,5),dt3(5,6,0);
đối tượng dt1 gọi hàm khởi tạo không tham số hay chương trình thực hiện lệnh cout << "Chào các bạn đến với C++" << endl;
dt2 gọi hàm có tham số và thực hiện lệnh gán dt2.x = 2 ;dt2.y = 5; dt2.z =5 ;
dt3 gọi hàm có tham số và thực hiện lệnh gán dt3.x = 2 ;dt3.y = 6; dt3.z =0 ;
+ Chú ý :
- Khi khai báo một biến đối tượng có thể dùng tham số để khởi gán thuộc tính cho đối tượng
- Khi khai báo mảng đối tượng không thể dùng tham số để khởi gán
- Câu lệnh khai báo biến đối tượng gọi tới hàm tạo một lần
- Câu lệnh khai báo mảng có n đối tượng gọi tới hàm n lần
** Với các hàm có đối kiểu lớp thì đối chỉ xem là tham số 'hình thức' vì vậy sẽ không tạo
ĐỐI TƯỢNG MỚI do đó sẽ KHÔNG GỌI hàm tạo
Trong trường hợp class không có hàm tạo thì khi khai báo chương trình cấp phát bộ nhớ cho đối
tượng và gọi hàm tạo mặc định hàm này không có đối và không làm gì cả : hamtao(){};
Trong trường hợp có ít nhất một hàm tạo khi khai báo đối tượng chương trình cấp phát bộ
nhớ cho đối tượng sau đó gọi đến hàm tạo CẦN gọi nếu không thấy hàm nào thỏa mãn chương trình
sẽ báo lỗi .
Những lỗi phát sinh trong quá trình sử dụng hàm tạo :
- Chúng tao không khai báo hàm tạo không đối nhưng sử dụng nó.
- Chúng tao vừa khai báo hàm tạo không đối vừa khai báo hàm tạo có đối nhưng trong hàm
tạo có đối những đối ta để giá trị mặc định vd :
hamtao(){cout << "Chao cac ban. ";};
hamtao(int x=0; int y=1){....};
int main(){Ten_class dt;}
Lúc này chương trình sẽ không biết gọi hàm tạo nào vì cả 2 hàm tạo đều thỏa mãn
Không có nhận xét nào:
Đăng nhận xét