c++ - 基类不可访问错误,为什么私有继承会这样做?
问题描述
class a
{
public:
int var;
};
class b : a
{
};
int main()
{
a* p = new b();
return 0;
}
我知道它是由私人继承引起的,但我想知道为什么会这样?
解决方案
这正是私有继承中“私有”的含义。b
继承自的事实a
是一个实现细节,从外部看不到。
我没有尝试访问类外部的任何私有成员,或任何受保护的外部类层次结构,我只是尝试使用基类指针创建一个动态对象,它会引发错误
您正在尝试访问从 ab*
到 a的转换,a*
但您不能,因为从外部无法访问基类。私有继承更接近于组合而不是公共继承。您的示例可以重写为
class b {
a a_instance;
};
的实现b
会略有不同(因为对a
成员函数的调用是通过a_instance
而不是this
),但效果是一样的:我们组成b
并且a
用户对此一无所知(aka private
)。
推荐阅读
- c# - BrowserFetcher 使用 await 退出应用程序
- java - 为更明确的方法参数声明包装单个值
- c# - 如何使用 HttpClient 处理 OAuth2.0 请求 västrafik api
- codenameone - 为什么 CodenameOne Picker 在 GUI Builder 之后不显示选择的列表项?
- r - R中的桑基图
- cordova - 安装 ionic-cli-4 后无法识别 Cordova 命令
- javascript - 在 NodeJS 中修改 Promise 原型
- python - Python Tkinter 绑定子小部件
- mysql - mysql - 查询以创建新表并按字段名称对其进行排序不起作用
- reactjs - 派发任何动作到 redux 它清除状态的其他部分