Search…

Hàm Tạo Mặc Định trong Lập Trình Hướng Đối Tượng

21/09/20203 min read
Phân tích sự khác biệt giữa hàm tạo mặc định và hàm tạo không đối số trong lập trình hướng đối tượng với C++.

Bài viết này hướng về phân tích sự khác biệt giữa khái niệm:

  • Hàm tạo mặc định - Default Constructor.
  • Hàm tạo không đối số - Constructor with no parameters - trong lập trình hướng đối tượng.

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

Hàm tạo mặc định không phải là 1 hàm tạo, nó là 1 khái niệm nhằm nói về loại hàm tạo không cần truyền đối số, mặc định sử dụng khi khai báo 1 đối tượng của lớp.

Cần tránh hiểu nhầm hàm tạo mặc định là hàm tạo không đối số. Đôi khi 1 hàm tạo có đối số mặc định cũng được sử dụng như hàm tạo mặc định (tất cả đối số của hàm tạo đều có giá trị mặc định).

Hàm tạo mặc định của lớp cơ sở còn được sử dụng khi sử dụng hàm tạo của lớp kế thừa mà không khai báo sẽ sử dụng hàm tạo nào của lớp cơ sở.

Ví dụ về 2 trường hợp sử dụng hàm tạo mặc định:

MyClass l_object;
MyClass* l_pointer = new MyClass();

Ví dụ về trường hợp sử dụng và không sử dụng hàm tạo mặc định của lớp cơ sở:

// Use the BaseClass's Default Constructor
DeliveredClass() : BaseClass()
{
}

// Use the BaseClass's Default Constructor
DeliveredClass(float a, float b, int c)
{
}

DeliveredClass(int a, int b) : BaseClass(a)
{
}

Hàm tạo không đối

Hàm tạo không đối là loại hàm tạo không cần truyền vào đối số. Hàm tạo không đối được trình biên dịch tự động sinh ra khi viết 1 lớp không có hàm tạo, tuy nhiên, nếu lớp đã có khai báo bất kỳ 1 loại hàm tạo nào khác, trình biên dịch sẽ không sinh ra hàm tạo không đối cho lớp.

Ví dụ về hàm tạo không đối:

class MyClass
{
public:
	MyClass()
	{
		// Do something
	}
 
	// Some other methods and properties
}

Hàm tạo có đối số mặc định

Hàm tạo có đối số mặc định là hàm tạo có đối số với 1, 1 số hoặc tất cả đối số đều có giá trị mặc định.

Hàm tạo có đối số mặc định không yêu cầu lập trình viên truyền vào tất cả các đối số để chạy. Chỉ cần truyền vào tối thiểu là tất cả các đối số không có giá trị mặc định.

Trường hợp có nhiều hàm tạo có đối số mặc định trong 1 lớp thì danh sách đối số không có giá trị mặc định của mỗi hàm nên khác nhau, vì có thể dẫn tới lỗi biên dịch khi sử dụng.

Các đối số có giá trị mặc định phải được đặt ở cuối danh sách đối số.

Hàm tạo có đối số mặc định sẽ trở thành Hàm tạo mặc định nếu tất cả các đối số của hàm đều có giá trị mặc định.

Ví dụ về khai báo hàm tạo có đối số mặc định:

MyClass(float f, double* b = nullptr, double d = 5.0, int c = 3); 
MyClass(int a = 5, double* b = nullptr); // Default Constructor

Ví dụ về sử dụng hàm tạo có đối số mặc định:

MyClass l_object1(5, nullptr, 6.1);	// First constructor 
MyClass l_object2;			// Second constructor
MyClass* l_pointer = new MyClass();	// Second constructor
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024