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ớ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