c++ - C++ 中的私有继承可见性/访问
问题描述
为什么接口由于私有继承而在方法中具有特殊的可见性?
请注意,我的派生类中需要全局说明符:: 。
我不明白为什么一个方法由于私有继承而继承了某种可见性。Derived 类无法访问 Control 是完全合理的。但为什么它也不能通过成员访问?
class Control
{
public:
void ModifySomething();
};
class Base : private Control
{
private:
virtual void Update( Control& i_control );
};
class Derived : public Base
{
private:
// ----------↓↓
void Update( ::Control& i_control ) override;
};
注意:我知道我们可以通过组合来解决这个问题。但我想知道为什么它在 C++ 中是这样定义的。我们可以打破 const-ness 还是什么?
解决方案
class Derived
无权访问 中的任何内容private
,class Base
因此无法访问class Control
through Base
。但是,它可以Control
直接访问,因为它与Derived
.
正如@foreknownas_463035818 评论的那样,有两条通往Control
from的路径,Derived
但一条由于private
访问控制而被阻止,因此选择了另一条全局路径。
推荐阅读
- python - python导入何时加载到内存中?
- python - button.Button 类错误:'button_list not defined'..... :( 使用 replit
- python - 为什么 Panda 在这种情况下会返回 ValueError?
- android - 如何在Android服务类中的ImageView上设置drawable
- google-cloud-platform - 谷歌云计算引擎 - 禁用自动更新(centos)
- python - plotly dash 下载字节流
- powerbi - 在 PowerBI 中定义日期切片器的预选
- r - 在ggplot2中的条形图中绘制线
- r - RStudio 的帮助工具提示中缺少图像
- wordpress - Wocomerce 订单出口调度