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.