You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++私有继承中基类私有成员是否可被派生类访问?

私有继承下派生类能否访问基类私有成员?

结论很明确:无论使用哪种继承方式(公有、保护、私有),派生类都无法直接访问基类的私有成员。你的代码验证结果是正确的,那本书的内容存在表述不准确的问题。

核心原理说明

继承方式的作用是修改基类的公有/保护成员在派生类中的访问权限,而基类的私有成员本身的访问规则是固定的:只能被基类自身的成员函数和友元访问,派生类(无论继承方式如何)都没有直接访问的权限。

你的代码分析

你编写的代码中,BASE类的x是私有成员,DERIVED类通过私有继承BASE后,尝试在print_X函数中直接访问x,这完全符合C++的访问控制规则——编译器报错是正常行为,你的操作没有任何错误。

关于C++标准的补充

你查阅的n4296文档的11.2节其实明确了这一点:基类的私有成员在派生类中属于不可访问状态,这一规则不受继承方式的影响。

对那本书内容的修正

那本书的标题“继承的结果是基类的所有字段都被派生类继承”表述不够严谨,准确的说法是:基类的所有成员(包括私有成员)都会被派生类继承,但私有成员在派生类中处于不可访问状态。继承方式只影响基类公有/保护成员在派生类中的可见性,不改变“继承私有成员”这个事实,但派生类无法使用这些继承来的私有成员。

内容的提问来源于stack exchange,提问作者git_blame_me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:01:09