为何派生类可访问基类私有成员?C++代码示例技术问询
代码可编译运行的原理解释
这段代码能正常编译运行,核心在于C++中友元权限的覆盖范围和嵌套类的成员访问规则:
FirstBase是Base的嵌套类,它通过friend class Base;将整个Base类声明为自己的友元。根据C++规则,被声明为友元的类,其所有成员(包括成员函数、嵌套类及其成员函数)都有权访问友元声明所在类的私有成员。SecondBase作为Base的嵌套类,属于Base的成员范畴。因此SecondBase的成员函数t(),相当于Base的“内部成员”,自然享有Base作为FirstBase友元的权限,能直接访问FirstBase的私有成员x。
需要澄清的误区:这不是友元权限的传递——SecondBase并没有被FirstBase直接声明为友元,而是依托其所属的Base类的友元身份,获得了访问权限。
额外说明:代码中SecondBase构造函数里的FirstBase()调用是冗余的,派生类的默认构造函数会自动调用基类的默认构造函数,不影响代码的合法性。
内容的提问来源于stack exchange,提问作者Manarbek
相关产品推荐
相关产品推荐

