MST

星途 面试题库

面试题:C++友元类作用范围与继承关系的探讨

假设有类Base,类Derived继承自Base。类FriendClass是Base的友元类。请分析FriendClass能否访问Derived类中从Base继承而来的私有成员?如果能,如何实现;如果不能,说明原因。同时阐述在这种继承结构下,友元类作用范围的变化和限制。
46.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

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