JavaScript is required

Cho đoạn chương trình sau:

class A {
int x,y;
public:
void Nhap();
void Xuat();
};
class B:public A{
private: float z;
};
void main()
{
A A1;B B1;
A1=B1;
B1=A1;
getch();
}
Hãy cho biết đoạn chương trình trên lỗi tại đâu?

A.

Tại câu lệnh B1=A1;

B.

Tại câu lệnh A1=B1

C.

 Tại câu lệnh class B:public A

D.

Không lỗi tại dòng nào cả?

Trả lời:

Đáp án đúng: A


Trong đoạn chương trình trên, lỗi xảy ra ở câu lệnh `B1=A1;`. **Giải thích:** * **Tính tương thích của kiểu dữ liệu:** Phép gán `A1 = B1;` là hợp lệ vì lớp `B` kế thừa từ lớp `A` (quan hệ "is-a"). Do đó, một đối tượng của lớp `B` có thể được gán cho một đối tượng của lớp `A` (upcasting). Tuy nhiên, phép gán ngược lại `B1 = A1;` (downcasting) không được thực hiện một cách tự động trong C++ vì một đối tượng của lớp `A` không nhất thiết là một đối tượng của lớp `B`. * **Mất mát thông tin:** Khi gán `B1 = A1;`, đối tượng `B1` có thêm thành viên `z` (kiểu float) mà đối tượng `A1` không có. Nếu gán trực tiếp như vậy, trình biên dịch sẽ không biết giá trị nào sẽ được gán cho thành viên `z` của `B1`, dẫn đến lỗi. Để khắc phục lỗi này, cần thực hiện ép kiểu tường minh hoặc định nghĩa toán tử gán phù hợp cho lớp `B` để xử lý việc gán từ đối tượng lớp `A`. Do đó, đáp án đúng là "Tại câu lệnh B1=A1;"

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