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?
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?
Trả lời:
Đáp án đúng: A
Trong đoạn chương trình trên, lớp B kế thừa từ lớp A. Điều này có nghĩa là một đối tượng của lớp B chứa tất cả các thành viên của lớp A (x và y) cộng với thành viên riêng của nó (z).
Câu lệnh `A1 = B1;` gán một đối tượng lớp B cho một đối tượng lớp A. Vì lớp B là lớp con của lớp A, nên việc gán này là hợp lệ. Nó sẽ sao chép các thành viên x và y từ B1 sang A1. Hành vi này được gọi là " cắt lát đối tượng " (object slicing) vì phần "thêm" của đối tượng B (trong trường hợp này là thành viên z) bị loại bỏ.
Câu lệnh `B1 = A1;` gán một đối tượng lớp A cho một đối tượng lớp B. Điều này không hợp lệ vì một đối tượng lớp A không có thành viên z, mà lớp B cần. Trình biên dịch sẽ báo lỗi vì không có cách nào để gán một đối tượng "nhỏ hơn" (lớp A) cho một đối tượng "lớn hơn" (lớp B) mà không gây ra vấn đề về bộ nhớ (vì thành viên z sẽ không được khởi tạo).
Do đó, câu lệnh gây ra lỗi là `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

FORM.08: Bộ 130+ Biểu Mẫu Thống Kê Trong Doanh Nghiệp

FORM.07: Bộ 125+ Biểu Mẫu Báo Cáo Trong Doanh Nghiệp

FORM.06: Bộ 320+ Biểu Mẫu Hành Chính Thông Dụng

FORM.05: Bộ 330+ Biểu Mẫu Thuế - Kê Khai Thuế Mới Nhất

FORM.04: Bộ 240+ Biểu Mẫu Chứng Từ Kế Toán Thông Dụng
