关于访问说明符的困惑
Confusion about Access Specifier
我目前正在阅读SFML游戏开发一书。我明白了,因为在整本书中,人们将使用SFML API开发整个游戏,更重要的是C++11。我真的很喜欢通过实际使用它们而不是参考风格阅读它们来了解所有新功能。
但是,代码中有一小部分我真的没有得到。(也许我的不理解甚至与C++ 11无关,它肯定与SFML无关。
请看SceneNode.hpp
:
class SceneNode
{
public:
// ...
void attachChild(std::unique_ptr<SceneNode> child);
// ...
private:
std::vector<std::unique_ptr<SceneNode>> mChildren;
SceneNode* mParent;
};
您可能已经猜到了,SceneNode
表示非常简单的树中的一个节点。我不明白的是SceneNode::attachChild
的实现:
void SceneNode::attachChild(std::unique_ptr<SceneNode> child)
{
child->mParent = this; // How can mParent be accessed? It's private?!
this->mChildren.push_back(std::move(child));
}
如您所见,该方法接收一个std::unique_ptr
,该指向要按值附加的SceneNode
,从而声明其所有权。但是,child
的会员mParent
仍然是私有的,为什么我们可以访问它?
我觉得有一个令人尴尬的简单解决方案,不过我无法弄清楚......
你是对的,这不是特定于C++11的。类类型的对象能够访问同一类类型的对象的私有成员。也就是说,成员private
类,而不是对象。您可以从另一个SceneNode
访问SceneNode
的私有成员。
为了封装,我们有访问说明符 - 将类的内部实现与使用该类的代码分离。由于类已经知道自己的内部实现(其成员函数与其数据成员紧密耦合),因此允许相同类型的对象访问彼此的私有成员不会丢失封装。
相关文章:
- 函数模板签名中忽略的成员类型def 的访问说明符
- C++ 访问说明符理解
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 访问说明符和性能
- 访问说明符外部的 C++ 类成员
- 在scons中将访问说明符从private更改为public
- 使用Astmatcher获得至少两个相同访问说明符的课程
- 内联访问说明符出现语法问题
- 为什么C 标准专门为具有不同访问说明符的类数据成员的内存布局提供了余地
- 访问has-a关系的访问说明符
- 访问说明符不会更改可访问性级别.这是什么意思
- 关于C++中的访问说明符
- 关于访问说明符的困惑
- 类定义中的宏相关访问说明符是否会导致未定义的行为
- 为什么虚函数无视访问说明符?C++
- 模拟 C 中的访问说明符
- 访问说明符对好友函数是否重要
- 细粒度访问说明符 c++
- 对基于访问说明符的特定重载函数使用声明
- 在C++中,do访问说明符不控制静态成员的可见性