我正在看书SFML游戏开发。我明白了,因为在本书中,我将使用SFML API和(更重要的)C++ 11来开发整个游戏。我真的很喜欢通过实际使用它们而不是阅读关于它们的参考风格来介绍所有新功能。关于Access Specifier的困惑
但是,有一小部分代码我真的不明白。 (也许我没有理解甚至没有做与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
仍然是私人的,为什么我们可以访问它?
我觉得有一个令人尴尬的简单的解决办法,我无法弄清楚,虽然...
'私人'并不意味着“只能通过这个对象访问”,这意味着“只能访问这个类”。 – Casey