JavaScript is required

Phát biểu nào dưới đây là không đúng về hàm khởi tạo trong kế thừa:

A.
Khi khai báo một đối tượng có kiểu lớp được dẫn xuất từ một lớp cơ sở khác. Chương trình sẽ tự động gọi tới hàm khởi tạo của lớp dẫn xuất. Tuy nhiên, thứ tự được gọi sẽ bắt đầu từ hàm khởi tạo tương ứng của lớp cơ sở, sau đó đến hàm khởi tạo của lớp dẫn xuất.
B.
Nếu định nghĩa hàm khởi tạo bên ngoài phạm vi lớp thì phải thêm tên lớp dẫn xuất và toán tử phạm vi "::" trước tên hàm khởi tạo.
C.
Giữa tên hàm khởi tạo của lớp dẫn xuất và hàm khởi tạo của lớp cơ sở, chỉ có môt dấu hai chấm ":", nếu là hai dấu "::" thì trở thành toán tử phạm vi lớp.
D.
Nếu không chỉ rõ hàm khởi tạo của lớp cơ sở sau dấu hai chấm ":" chương trình sẽ tự động gọi hàm khởi tạo ngầm định hoặc hàm khởi tạo không có tham số của lớp dẫn xuất nếu hàm đó được định nghĩa tường minh trong lớp cơ sở.
Trả lời:

Đáp án đúng: C


Trong kế thừa, khi một đối tượng của lớp dẫn xuất được tạo, hàm khởi tạo của lớp cơ sở sẽ được gọi trước, sau đó đến hàm khởi tạo của lớp dẫn xuất (phương án A đúng). Khi định nghĩa hàm khởi tạo bên ngoài lớp, ta sử dụng toán tử phạm vi "::" để chỉ rõ hàm khởi tạo thuộc lớp nào (phương án B đúng). Khi lớp dẫn xuất gọi hàm khởi tạo của lớp cơ sở trong danh sách khởi tạo thành viên, ta sử dụng một dấu hai chấm ":" (phương án C đúng). Nếu không chỉ rõ hàm khởi tạo của lớp cơ sở trong danh sách khởi tạo thành viên, trình biên dịch sẽ cố gắng gọi hàm khởi tạo mặc định (không tham số) của lớp cơ sở. Nếu lớp cơ sở không có hàm khởi tạo mặc định và không có hàm khởi tạo nào được gọi rõ ràng trong lớp dẫn xuất, thì sẽ gây ra lỗi biên dịch (phương án D sai, vì nói rằng chương trình sẽ tự động gọi hàm khởi tạo ngầm định hoặc hàm khởi tạo không có tham số của lớp dẫn xuất, trong khi phải là của lớp cơ sở).

Câu hỏi liên quan