C++私有继承中基类私有成员是否可被派生类访问?
私有继承下派生类能否访问基类私有成员?
结论很明确:无论使用哪种继承方式(公有、保护、私有),派生类都无法直接访问基类的私有成员。你的代码验证结果是正确的,那本书的内容存在表述不准确的问题。
核心原理说明
继承方式的作用是修改基类的公有/保护成员在派生类中的访问权限,而基类的私有成员本身的访问规则是固定的:只能被基类自身的成员函数和友元访问,派生类(无论继承方式如何)都没有直接访问的权限。
你的代码分析
你编写的代码中,BASE类的x是私有成员,DERIVED类通过私有继承BASE后,尝试在print_X函数中直接访问x,这完全符合C++的访问控制规则——编译器报错是正常行为,你的操作没有任何错误。
关于C++标准的补充
你查阅的n4296文档的11.2节其实明确了这一点:基类的私有成员在派生类中属于不可访问状态,这一规则不受继承方式的影响。
对那本书内容的修正
那本书的标题“继承的结果是基类的所有字段都被派生类继承”表述不够严谨,准确的说法是:基类的所有成员(包括私有成员)都会被派生类继承,但私有成员在派生类中处于不可访问状态。继承方式只影响基类公有/保护成员在派生类中的可见性,不改变“继承私有成员”这个事实,但派生类无法使用这些继承来的私有成员。
内容的提问来源于stack exchange,提问作者git_blame_me
相关产品推荐
相关产品推荐

