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


Câu hỏi kiểm tra kiến thức về hàm khởi tạo trong kế thừa trong lập trình hướng đối tượng. Phương án A đúng. 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ở được gọi trước, sau đó đến hàm khởi tạo của lớp dẫn xuất. Đây là quy tắc để đảm bảo các thành phần của lớp cơ sở được khởi tạo trước khi lớp dẫn xuất sử dụng chúng. Phương án B đúng. Khi định nghĩa hàm khởi tạo bên ngoài lớp, cần sử dụng toán tử phạm vi "::" để chỉ rõ hàm khởi tạo này thuộc về lớp nào. Ví dụ: DerivedClass::DerivedClass(int x) { ... } Phương án C sai. 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ở sử dụng một dấu hai chấm ":" để chỉ ra lời 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 (member initialization list). Toán tử "::" là toán tử phạm vi, dùng để truy cập các thành viên tĩnh của lớp hoặc để định nghĩa hàm bên ngoài lớp. Phương án D đúng. Nếu không chỉ rõ hàm khởi tạo của lớp cơ sở sau dấu hai chấm ":", trình biên dịch sẽ tự độ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, hoặc hàm khởi tạo mặc định bị xóa (deleted), thì sẽ gây ra lỗi biên dịch. Vậy, phương án C là phát biểu không đúng.

Câu hỏi liên quan