JavaScript is required

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

                                       

A.

Lỗi tại dòng obj1.x=10;

B.

Lỗi tại dòng obj2.y=8; 

C.

Lỗi tại dòng A.obj1;

D.

Lỗi tại dòng int x; 

Trả lời:

Đáp án đúng: A


Đoạn chương trình C++ này có một số lỗi. Ta xét từng dòng: * **`class A { ... };`**: Khai báo lớp `A` là đúng cú pháp. * **`int x;`**: Lỗi nằm ở đây. Biến `x` và `y` trong lớp `A` cần phải được khai báo là `public` để có thể truy cập từ bên ngoài lớp. Nếu không có chỉ định gì (như `public`, `private`, `protected`), mặc định các thành viên trong lớp là `private`, có nghĩa là chỉ có thể truy cập từ bên trong lớp. * **`A obj1;`**: Tạo một đối tượng `obj1` của lớp `A` là đúng. * **`A obj2;`**: Tạo một đối tượng `obj2` của lớp `A` là đúng. * **`obj1.x = 10;`**: Đây là nơi gây ra lỗi chính. Vì `x` là `private` (mặc định), ta không thể truy cập và gán giá trị cho nó từ bên ngoài lớp `A`. * **`obj2.y = 8;`**: Tương tự như trên, `y` là `private` nên không thể truy cập từ bên ngoài. * **`A::obj1;`**: Dòng này không có ý nghĩa và gây ra lỗi biên dịch. Ta không thể truy cập đối tượng theo cách này. Việc truy cập các thành viên tĩnh (static) của lớp thì được thực hiện bằng `A::ten_bien_static`, nhưng `obj1` không phải là thành viên tĩnh. Như vậy, lỗi chính là do việc cố gắng truy cập các thành viên `private` (`x` và `y`) từ bên ngoài lớp `A`. Để sửa lỗi, ta cần khai báo `x` và `y` là `public`. Nếu đề bài chỉ ra lỗi ở một dòng cụ thể, thì dòng `int x;` gây ra lỗi một cách gián tiếp, vì nó không khai báo `x` là `public`. Tuy nhiên, lỗi trực tiếp xuất hiện khi ta cố gắng truy cập `obj1.x = 10;` và `obj2.y = 8;`.

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