Lập trình

Lập trình

Thứ Sáu, 13 tháng 6, 2014

Chú ý về hàm khởi tạo, hàm mặc định trong class

// 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

Không có nhận xét nào:

Đăng nhận xét