Hàm tạo mặc định

Bách khoa toàn thư mở Wikipedia

Trong các ngôn ngữ lập trình máy tính, thuật ngữ hàm tạo mặc định (tiếng Anh: default constructor) dùng để chỉ một hàm tạo được tự động tạo ra bởi trình biên dịch trong trường hợp lập trình viên không định nghĩa bất cứ hàm tạo nào (ví dụ như trong Java), và thường là một hàm tạo rỗng (nullary constructor). Trong các ngôn ngữ khác (như trong C++) nó là hàm tạo có thể được gọi mà không cần cung cấp bất cứ đối số (argument) nào, cho dù hàm tạo được tự động sinh ra hay do người dùng định nghĩa. Lưu ý rằng một hàm tạo với các tham số chính thức vẫn có thể được gọi mà không cần đối số nếu đối số mặc định (default) được cung cấp trong định nghĩa hàm tạo.

C++[sửa | sửa mã nguồn]

Trong C++, tiêu chuẩn để mô tả một hàm tạo mặc định của một lớp là một hàm tạo mà có thể được gọi mà không có đối số (bao gồm cả một hàm tạo mà những tham số của nó là những đối số mặc định).[1] Ví dụ như:

class MyClass
{
public:
 MyClass(); // khai báo hàm tạo

private:
 int x;
};

MyClass::MyClass(): x(100) // định nghĩa hàm tạo
{
}

int main()
{
 MyClass m; // vào lúc chạy, đối tượng m được tạo ra, và hàm tạo mặc định được gọi
}

Khi cấp phát bộ nhớ động, hàm tạo có thể được gọi bằng cách thêm dấu ngoặc đơn vào sau tên lớp. Theo cách hiểu đó, đây là một lời gọi tường minh tới hàm tạo:

int main()
{
 MyClass * pointer = new MyClass(); // vào lúc chạy, đối tượng được tạo ra, và hàm tạo mặc định được gọi
}

Java và C#[sửa | sửa mã nguồn]

Trong cả JavaC#, "hàm tạo mặc định" dùng để chỉ một hàm tạo rỗng được sinh ra tự động bởi trình biên dịch nếu không có hàm tạo nào được định nghĩa cho lớp. Hàm tạo mặc định ngầm gọi hàm tạo rỗng của lớp cha, sau đó thực thi nội dung rỗng. Tất cả các trường được thiết lập về giá trị khởi tạo là 0 (kiểu số nguyên), 0.0 (kiểu dấu chấm động), false (kiểu boolean), hay null (kiểu tham chiếu). Hàm tạo do lập trình viên định nghĩa nhưng không có tham số cũng được gọi là hàm tạo mặc định trong C#, nhưng không phải trong Java.[2][3]

Tham khảo[sửa | sửa mã nguồn]

  1. ^ C++ standard, ISO/IEC 14882:1998, 12.1.5
    C++ standard, ISO/IEC 14882:2003, 12.1.5
  2. ^ Java Language Specification, 3rd edition, section 8.8.9, "Default Constructor".
  3. ^ Using Constructors (C# Programming Guide)