面试题答案
一键面试- FriendClass能否访问Derived类中从Base继承而来的私有成员:
- 答案:不能。
- 原因:友元关系不能被继承。虽然FriendClass是Base的友元类,能访问Base的私有成员,但对于Derived类,即使其从Base继承了私有成员,FriendClass并没有自动成为Derived的友元,所以不能访问Derived类中从Base继承而来的私有成员。
- 在这种继承结构下,友元类作用范围的变化和限制:
- 作用范围:友元类的作用范围仅限于授予其友元关系的类。在本题中,FriendClass只能访问Base类的私有成员,对于Base类的派生类(如Derived),除非明确将FriendClass声明为Derived的友元,否则FriendClass无法访问Derived类的任何成员(包括从Base继承的私有成员)。
- 限制:
- 友元关系不具备传递性。例如,如果A是B的友元,B是C的友元,这并不意味着A是C的友元。
- 友元关系不具备继承性。如上述例子,Base的友元类FriendClass不是其派生类Derived的友元。
- 友元破坏了类的封装性,因为友元类可以访问该类的私有和保护成员,所以应谨慎使用。