JavaScript is required

Cho lớp B, C kế thừa lớp A; Lớp D kế thừa lớp B và C. Khi đó đối tượng của lớp D không thể kế thừa được thành phần của A. Cần phải:

A.

Khai báo A là lớp cơ sở ảo đối với B và C

B.

Khai báo lại A là lớp cơ sở ảo với D

C.

Khai báo A là lớp cơ sở ảo đối với B

D.

Hiển nhiên lớp D không thể kế thừa lớp A vì kế thừa không có tính bắc cầu.

Trả lời:

Đáp án đúng: A


Trong C++, khi một lớp (ví dụ D) kế thừa từ nhiều lớp (ví dụ B và C), và cả B và C đều kế thừa từ một lớp chung (ví dụ A), thì D sẽ có hai bản sao của các thành viên của A. Điều này có thể gây ra sự mơ hồ khi D cố gắng truy cập các thành viên của A. Để giải quyết vấn đề này, ta sử dụng kế thừa ảo (virtual inheritance). Khi B và C kế thừa A một cách ảo, chúng chia sẻ một bản sao duy nhất của A, và D chỉ kế thừa một bản sao của A.

Đáp án 1 đúng vì khi khai báo A là lớp cơ sở ảo đối với B và C, đối tượng của lớp D sẽ chỉ có một bản sao của A, loại bỏ sự mơ hồ và cho phép truy cập các thành viên của A một cách rõ ràng.

Đáp án 2 sai vì việc khai báo A là lớp cơ sở ảo đối với D không giải quyết được vấn đề gốc là B và C đang có các bản sao riêng của A.

Đáp án 3 sai vì cần khai báo A là lớp cơ sở ảo đối với cả B và C, không chỉ B.

Đáp án 4 sai vì kế thừa có tính bắc cầu, nhưng cần kế thừa ảo để giải quyết vấn đề đa kế thừa khi có lớp cơ sở chung.

Cùng ôn thi với bộ câu hỏi trắc nghiệm môn Lập trình hướng đối tượng có đáp án mà tracnghiem.net chia sẽ dưới đây, nhằm giúp các bạn sinh viên chuyên ngành chuẩn bị cho kì thi sắp tới.


50 câu hỏi 60 phút

Câu hỏi liên quan