JavaScript is required

In the following code, which of the following variables can be accessed in “Friend”? class Base { public: int a; protected: int b; private: int c; }; class Derived : Base { int d; friend Friend; }; class Friend { Derived derived; };

A.

only a and b

B.

a,b and c

C.

only a

D.

error

Trả lời:

Đáp án đúng: D


Trong C++, một lớp (class) được khai báo là `friend` của một lớp khác, nó có quyền truy cập vào tất cả các thành viên của lớp kia, bất kể chúng được khai báo là `public`, `protected` hay `private`. Trong đoạn mã trên, `Friend` được khai báo là `friend` của `Derived`. Do đó, `Friend` có thể truy cập vào tất cả các thành viên của `Derived`, kể cả các thành viên kế thừa từ `Base`. Các thành viên của `Base` bao gồm: - `a` (public): Có thể truy cập từ bất cứ đâu. - `b` (protected): Có thể truy cập từ các lớp con và các lớp `friend`. - `c` (private): Chỉ có thể truy cập từ bên trong lớp `Base`. Vì `Friend` là `friend` của `Derived`, và `Derived` kế thừa từ `Base`, `Friend` có thể truy cập `a` và `b` của `Base` thông qua một đối tượng `Derived`. Tuy nhiên, `Friend` không thể trực tiếp truy cập `c` vì `c` là `private` trong `Base`, và chỉ có các thành viên của `Base` mới có quyền truy cập. Ngoài ra, `Friend` có thể truy cập `d`, là một thành viên của `Derived`. Như vậy, `Friend` có thể truy cập `a` và `b` thông qua đối tượng `derived` của lớp `Derived`. Vì vậy, đáp án đúng là A.

Câu hỏi liên quan