我是面向对象编程的新手。我正在通过一些代码来学习一些面向对象的编程。 Scratch C ++的游戏提供了一些名为Pang的游戏代码,可帮助您学习OOP概念。在下面的代码中,我可以看到从sf :: RenderWindow类创建了一个对象,并且该对象在另一个类中定义为静态。我对这里发生的事情感到困惑,是否有可能做这样的事情。如果熟悉SFML的人可以回答这个问题,我将不胜感激。另外,科幻是什么?在这里站住吗?
#pragma once
#include "SFML/Window.hpp"
#include "SFML/Graphics.hpp"
class Game
{
public:
static void Start();
private:
static sf::RenderWindow _mainWindow;
};
答案 0 :(得分:1)
sf
是名称空间,类似于std
是cout
的名称空间。从技术上讲,它的意思是“简单而快速”,但除了提供定义其功能的唯一上下文外,它实际上并不重要。
这样一来,例如,您可以在printNumber()
和foo
命名空间中都拥有一个bar
函数,并具有不同的实现,并且可以使用foo::printNumber()
分别调用它们和bar::printNumber()
。这是一种组织技术。
在这种情况下,static
_mainWindow
成员意味着仅创建了一个实例,无论您创建多少个Game类实例,都将永远只有一个_mainWindow
。因此,您将无法像往常一样this->mainWindow
来访问它,但是由于该实例独立于任何特定的Game实例,因此您可以使用Game::_mainWindow
来访问它。不确定这可能只是为了确保只打开一个窗口。
注意:namespace
和static
都使用语法foo::bar
,意思是“在上下文foo中查找bar”。