JavaScript is required

What is wrong in the following code?
Media VietJack

A.
There is nothing wrong
B.
One cannot have a ‘Base’ pointer to ‘Derived’ since it is not derived publicly
C.
One need a derived class pointer to point to a derived class
D.
One required to code a constructor for Derived
Trả lời:

Đáp án đúng: B


Đoạn mã C++ này có một lỗi quan trọng liên quan đến tính kế thừa và con trỏ. **Phân tích lỗi:** * **Tính kế thừa:** Lớp `Derived` kế thừa từ lớp `Base` theo chế độ `private`. Điều này có nghĩa là tất cả các thành viên của `Base` (kể cả các thành viên `public`) trở thành `private` trong `Derived`. Do đó, bên ngoài lớp `Derived`, không thể truy cập hoặc sử dụng các thành viên của `Base` thông qua đối tượng của `Derived`. * **Con trỏ và ép kiểu:** Trong hàm `main`, bạn đang cố gắng gán địa chỉ của một đối tượng `Derived` cho một con trỏ kiểu `Base*`. Tuy nhiên, vì `Derived` kế thừa `Base` theo chế độ `private`, việc ép kiểu ngầm định từ `Derived*` sang `Base*` là không hợp lệ bên ngoài lớp `Derived`. Điều này là do trình biên dịch không cho phép bạn sử dụng một con trỏ `Base*` để truy cập các thành viên `private` của `Base` trong `Derived` từ bên ngoài. **Giải thích các phương án:** * **A. There is nothing wrong:** Sai. Như đã giải thích ở trên, có một lỗi trong việc sử dụng con trỏ và tính kế thừa. * **B. One cannot have a ‘Base’ pointer to ‘Derived’ since it is not derived publicly:** Đúng. Vì kế thừa là `private` nên không thể dùng con trỏ `Base` để trỏ đến đối tượng `Derived` bên ngoài lớp `Derived`. * **C. One need a derived class pointer to point to a derived class:** Sai. Vấn đề không phải là việc cần con trỏ của lớp con, mà là chế độ kế thừa `private` ngăn cản việc sử dụng con trỏ lớp cha để trỏ đến đối tượng lớp con từ bên ngoài. * **D. One required to code a constructor for Derived:** Sai. Mặc dù việc có constructor cho `Derived` là cần thiết trong nhiều trường hợp, nhưng nó không phải là nguyên nhân trực tiếp gây ra lỗi trong đoạn mã này. Lỗi chủ yếu đến từ việc kế thừa `private`. **Kết luận:** Đáp án đúng là **B**. Kế thừa `private` ngăn cản việc sử dụng con trỏ `Base` để trỏ đến đối tượng `Derived` bên ngoài lớp `Derived`.

Câu hỏi liên quan