6.5.8 Hàm khởi tạo mặc định – default constructors (2)

Hãy xem ví dụ sau →

Trông có vẻ ổn đúng không ? Nhưng sự thật thì không hẳn vậy, chương trình này sẽ có lỗi biên dịch.

Tại sao ?

Có một constructor (2 tham số) trong class WithConstructor. Và sự tồn tại của bất kỳ constructor nào trong class cũng giống như một tuyên bố được đưa ra bởi developer, đó là: “Tôi sẽ sử dụng các hàm khởi tạo mà tôi định nghĩa trong lớp của tôi”. Tuyên bố đó sẽ được công nhận bởi trình biên dịch và trình biên dịch sẽ không tạo ra default constructor ngầm định cho lớp đó nữa.

Trong ví dụ trên thì default constructor phải được gọi ngầm khi mỗi đối tượng mới được tạo ra (trong ví dụ là 2 lần), trong khi class WithConstructor lại không có default constructor (vừa giải thích bên trên). Làm thế nào chúng ta có thể giải quyết vấn đề này ?

Tất nhiên, chúng ta có thể viết riêng default constructor (không tham số) cho class WithConstructor. Trông nó kiểu như thế này:

WithConstructor (void): i (0), f (0.0) {}

và được đặt ở đâu đó trong khu vực public của lớp. Nó sẽ làm cho cả hai trường và được khởi tạo bằng 0 khi một đối tượng mới của lớp được tạo ra.

Tuy nhiên, có một giải pháp đơn giản để giải quyết. Hãy xem tiếp ở phần tiếp theo 👉