Hướng dẫn constructor c++ là gì
Chúng ta đã được biết về lớp, đối tượng và các cách xác định hàm ở bài trước. Trong bài này mình sẽ tìm hiểu về hàm khởi tạo và hàm hủy trong C++ là gì và khác gì so với các hàm thông thường nhé. Bài viết sẽ sử dụng C++ là ngôn ngữ chính để giải thích và code minh họa cho OOP nên chúng ta cần hiểu rõ một đặc tính của C++ trong lập trình hướng đối tượng. 1. Hàm khởi tạo (Constructor):Hàm khởi tạo (constructor) là một phương thức đặc biệt được gọi tự động tại thời điểm đối tượng được tạo. Mục đích của hàm khởi tạo là để khởi tạo các thành viên dữ liệu của đối tượng. Một hàm khởi tạo sẽ khác những hàm thông thường ở những điểm sau:
Ví dụ ta có lớp 0 và 1, thì hàm khởi tạo có thể định nghĩa cho lớp Mayvitinh như sau:
Hàm khởi tạo về cơ bản sẽ được chia làm 3 loại:
1.1. Hàm khởi tạo không tham số (Default Constructor):Mình lấy một ví dụ:
Khi chạy chương trình ta sẽ có kết quả như sau: Trong ví dụ trên, hàm tạo 3 không hề có đối số nào được truyền vào. 1.2. Hàm khởi tạo có tham số (Parameterized Constructor):Với loại hàm tạo này ta có thể truyền đối số cho chúng. Thông thường, các đối số này giúp khởi tạo một đối tượng khi nó được tạo. Để khai báo một hàm khởi tạo có tham số chỉ cần thêm các tham số vào nó giống như cách bạn thêm tham số bất kỳ hàm nào khác. Khi bạn xác định phần thân của hàm tạo, hãy sử dụng các tham số để khởi tạo đối tượng. Chúng ta cùng xem xét một ví dụ đơn giản về hàm khởi tạo có tham số trong C++ như sau:
Sau khi chạy chương trình ta sẽ có kết quả: Lưu ý:
Công dụng của hàm khởi tạo có tham số
1.3. Hàm khởi tạo sao chép (Copy Constructor): Hàm khởi tạo sao chép (Copy Constructor) là một hàm xây dựng được sử dụng để khai báo và khởi tạo một đối tượng từ một đối tượng khác. Cú pháp của hàm khởi tạo sao chép (Copy Constructor) như sau:
Trong đó 4 là tên của lớp, 5 là đối tượng cũ sẽ lấy làm gốc để sao chép sang đối tượng mới.Chúng ta lấy ví dụ đơn giản về hàm khởi tạo sao chép nhé:
Và kết quả sau khi thực thi chương trình trên như sau: Hàm khởi tạo sao chép (Copy Constructor) được gọi trong các trường hợp sau đây:
Ví dụ: 6
Lưu ý: Bất cứ khi nào chúng ta định nghĩa một hoặc nhiều hàm tạo có tham số cho một lớp, hàm tạo mặc định (không có tham số) cũng phải được xác định rõ ràng vì trình biên dịch sẽ không cung cấp hàm tạo mặc định trong trường hợp này. Điều đó tuy không cần thiết nhưng nó được coi là cách tốt nhất để luôn xác định một hàm tạo mặc định. 2. Hàm hủy (Desconstructor):Hàm hủy (Destructor) ngược lại với hàm khởi tạo, trong khi hàm khởi tạo dùng để khởi tạo giá trị cho đối tượng thì hàm hủy dùng để hủy đối tượng. Chỉ có duy nhất một hàm hủy trong một lớp. Hàm hủy tự động được gọi. Nếu như chúng ta không định nghĩa hàm hủy thì mặc định trình biên dịch sẽ tự tạo ra một hàm hủy mặc nhiên. Cũng giống như hàm xây dựng, hàm hủy được định nghĩa có cùng tên với tên lớp, khôn có bất cứ kiểu gì trả về kể cẳ kiểu 8 trước tên của hàm hủy.Cú pháp của hàm hủy (Destructor) như sau:
Chúng ta cùng xem xét một ví dụ đơn giản nhất về hàm hủy như sau:
Và sau khi chạy chương trình sẽ có kết quả như sau: Như trong code trên, ta có thể thấy hàm hủy (Destructor) sẽ được gọi tự động khi đối tượng đi ra khỏi phạm vi:
Và có hai hạn chế khi sử dụng hàm hủy đó là:
Với C++ thì nếu ta không khai báo một hàm hủy, trình biên dịch cũng sẽ tự định nghĩa một hàm hủy. Thông thường thì hàm hủy này hoạt động khá tốt, nhưng khi bài toán có sử dụng con trỏ, hoặc cấp phát bộ nhớ động thì ban nên khai báo một hàm huỷ riêng để tránh rỏ rỉ bộ nhớ. Tạm kếtNhư vậy là chúng ta đã tìm hiểu xong hàm khởi tạo (Constructor) và hàm hủy (Destructor), hai hàm này sẽ gắn liền xuyên suốt trong OOP. Mình sẽ kết thúc bài này tại đây. Các bạn có thể rate và comment góp ý ở bên dưới nếu thấy bất cứ điều gì không chính xác để những bài sau tốt hơn. |