Lập trình

Lập trình

Chủ Nhật, 8 tháng 6, 2014

Hàm tạo(dựng ) trong c++

copy từ http://laptrinh.vn/d/146-ham-tao-constructor.html
Trong chương trình C++, luôn có một hàm tạo mặc định. Tuy nhiên, trong nhiều trường hợp, hàm tạo mặc định này không đáp ứng được yêu cầu xây dựng đối tượng mới.

1. Công dụng
Hàm tạo là một phương thức của lớp, dùng để tạo dựng một đối tượng mới. Chương trình dịch sẽ cấp phát bộ nhớ cho đối tượng sau đó sẽ gọi đến hàm tạo. Hàm tạo sẽ khởi gán giá trị cho các thuộc tính của đối tượng và có thể thực hiện một số công việc khác nhằm chuẩn bị cho đối tượng mới.


* Dùng hàm tạo trong khai báo
+ Khi đã xây dựng các hàm tạo, ta có thể dùng chúng trong khai báo để tạo ra một đối tượng đồng thời khởi gán cho các thuộc tính của đối tượng được tạo. Dựa vào các tham số trong khai báo mà trình biên dịch sẽ gọi đến hàm tạo nào.
+ Khi khai báo một biến đối tượng có thể sử dụng các tham số để khởi gán cho các thuộc tính của biến đối tượng.
+ Khi khai báo mảng đối tượng, không cho phép dùng các tham số để khởi gán.
+ Câu lệnh khai báo một biến đối tượng sẽ gọi tới hàm tạo 1 lần.
+ Câu lệnh khai báo một mảng n đối tượng sẽ gọi tới hàm tạo n lần.

* Dùng hàm tạo trong cấp phát bộ nhớ:
+ Khi cấp phát bộ nhớ cho một đối tượng có thể dùng các tham số để khởi gán cho các thuộc tính của đối tương:
DIEM *x = new DIEM[10, 20];
+ Khi cấp phát bộ nhớ cho một dãy đối tượng, không được phép dùng tham số để khới gán.

* Dùng hàm tạo để biểu diễn các đối tượng hằng

2. Cách viết hàm tạo

Khi viết hàm tạo cần chú ý tới 3 sự khác biệt so với các phương thức:
+ Tên của hàm tạo phải 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ó kết quả trả về

class A
{
      private:
              int x, y;
              ...
      public:
              A()
              {
                  x=0;
                  y=0;
                  ...
              }
              A(int x1, int y1)
              {
                  x=x1;
                  y=y1;
                  ...
              }
              ...
};

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

Đăng nhận xét