50 câu hỏi 60 phút
Hãy xem xét đoạn mã sau có lỗi ở dòng nào:
1. class Lopl
2. {
3. private:
4. int a,b;
5. friend voidNhap();
6. };
7. class Lop2
8. {
9. private:
10. float x,y;
11. friend void Nhap( );
12. };
13. void nhap()
14. {
15. Lop 1 obj 1; Lop2 obj 2;
16. cout«"\n\t Nhap a ="; cin»objl.a;
17. cout«"\n\t Nhap x cin»obj2.x;
18. }
Không lỗi ở dòng nào
Lỗi tại dòng 15
Lỗi tại dòng 13
Lỗi tại dòng 16, 17
Trong đoạn mã C++ đã cho, Lop2
kế thừa từ Lopl
và đồng thời chứa một đối tượng p
thuộc kiểu Lopl
. Câu hỏi đặt ra là làm thế nào để đối tượng objLop2
(thuộc lớp Lop2
) có thể truy xuất hàm nhap()
của lớp Lopl
.
Phân tích các phương án:
objLop2.nhap{)
objLop2.p.nhap()
. Cách viết objLop2.nhap{)
không hợp lệ trong C++, dấu ngoặc nhọn không đúng. Tuy nhiên, biểu thức objLop2.p.nhap()
là đúng. Vì Lop2
chứa một đối tượng p
kiểu Lopl
, ta có thể truy cập hàm nhap()
của p
bằng cách này.objLop2.nhap()
. Vì Lop2
kế thừa từ Lopl
, đối tượng objLop2
có thể trực tiếp truy cập các thành viên public của Lopl
, bao gồm cả hàm nhap()
. Do đó, phương án này đúng.objLop2.p ^nhap()
. Toán tử ^
không được sử dụng để truy cập thành viên của một đối tượng trong C++. Phương án này sai.Vì cả phương án 1 (một phần) và phương án 2 đều đúng, ta cần chọn phương án đúng nhất. Phương án 2 là ngắn gọn và trực tiếp nhất. Tuy nhiên, phương án 1 cũng đúng một phần (objLop2.p.nhap()
). Vì đề bài hỏi "cú pháp nào sau đây là đúng nhất?", ta chọn phương án 2.