JavaScript is required

What do you think is the outcome of calling a redefined non-virtual function using a base-class pointer?

A.
The appropriate redefined version of the function will be used
B.
The base-class version of the function will always be used
C.
The outcome is unpredictable
D.
A run-time error will occur
Trả lời:

Đáp án đúng: B


Trong C++, khi gọi một hàm không ảo (non-virtual) đã được định nghĩa lại (redefined) trong lớp con thông qua con trỏ hoặc tham chiếu kiểu lớp cha, phiên bản hàm của lớp cha sẽ luôn được gọi. Điều này là do trình biên dịch (compiler) xác định hàm nào sẽ được gọi dựa trên kiểu của con trỏ hoặc tham chiếu, không phải dựa trên kiểu của đối tượng thực tế mà con trỏ hoặc tham chiếu đang trỏ tới. Hiện tượng này được gọi là "static binding" hoặc "early binding". * **Phương án A:** Sai. Vì đây là hàm không ảo, phiên bản lớp con sẽ không được gọi. * **Phương án B:** Đúng. Hàm của lớp cha sẽ luôn được gọi. * **Phương án C:** Sai. Kết quả hoàn toàn có thể dự đoán được. * **Phương án D:** Sai. Lỗi biên dịch hoặc runtime không xảy ra trong trường hợp này.

Câu hỏi liên quan