gpt4 book ai didi

c++ - 关于访问说明符的困惑

转载 作者:行者123 更新时间:2023-11-30 02:48:43 26 4
gpt4 key购买 nike

我目前正在阅读SFML Game Development这本书。我明白了,因为在整本书中,人们将使用 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仍然是私有(private)的,为什么我们可以访问它?

我觉得有一个令人尴尬的简单解决方案,但我无法弄清楚......

最佳答案

你是对的,这不是 C++11 特有的。类类型的对象能够访问相同类类型的对象的私有(private)成员。也就是说,成员是类的私有(private),而不是对象。您可以从另一个 SceneNode 访问一个 SceneNode 的私有(private)成员。

为了封装,我们使用访问说明符——将类的内部实现与使用该类的代码分离。由于一个类已经知道它自己的内部实现(它的成员函数与其数据成员紧密耦合),所以允许相同类型的对象访问彼此的私有(private)成员不会丢失封装。

关于c++ - 关于访问说明符的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21837274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com