c++ - 为什么我可以从子类中调用私有函数
问题描述
我把一个班级放到另一个班级。我将最高级别的类的引用放入较低级别的类(不确定是否有这个的命名法......不是孩子/父母......?子类?)。我很惊讶地看到我可以从那个子类中调用私有函数。为什么这可能?
简单示例:我很惊讶 Bar 可以从 Foo 调用私有函数
// Example program
#include <iostream>
#include <string>
class Foo {
public:
class Bar {
public:
Bar(Foo &foo);
void DoFoo();
private:
Foo &foo;
};
Foo();
private:
void Do();
};
Foo::Foo(){}
void Foo::Do(){
std::cout << "im doing foo";
}
Foo::Bar::Bar(Foo &foo)
:foo(foo)
{
};
void Foo::Bar::DoFoo(){
this->foo.Do();
}
int main()
{
Foo foo;
Foo::Bar bar(foo);
bar.DoFoo();
}
解决方案
实际上访问限制在这里并不重要,因为(来自cppreference,强调我的)......
一个类的所有成员(成员函数体、成员对象的初始化器和整个嵌套类定义)都可以访问该类可以访问的所有名称。
在您的示例Bar
中是一个嵌套类,它可以访问所有成员Foo
(与它们是否被声明无关private
)。
PS请注意,这并不意味着也Foo
可以访问Bar
. 例如Bar::foo
,仅在内部可见,Bar
因为它已声明private
。
推荐阅读
- flutter - 如何通过索引获取枚举,反之亦然
- if-statement - 如何根据条件使连续行进入列?
- r - 基于多列的循环参数化格式化表
- mysql - COUNT() 没有显示正确的结果
- django - 你好有人可以告诉我我做错了什么路径没有被检测到
- node.js - 使用“编辑”lockType 在docusign 中创建信封锁不起作用
- python - Python 音频分析,频谱图:我应该使用哪个频谱图,为什么?
- javascript - 网络错误。反应应用程序中的请求超时
- html - 高度为 100% 的 div,无法滚动内容
- ssl - 将 cert-manager 证书移动到另一个 Kubernetes 集群