【问题标题】:SFML - Object Static DefinitionSFML - 对象静态定义
【发布时间】:2019-05-09 23:01:51
【问题描述】:

我是面向对象编程的新手。我正在通过一些代码来学习一些面向对象的编程。 Game from Scratch C++ 有一些用于帮助学习 OOP 概念的名为 Pang 的游戏的代码。在下面的代码中,我可以看到创建了 sf::RenderWindow 类的对象,并且该对象在另一个类中定义为静态。我对这里发生的事情感到困惑,是否有可能做这样的事情。如果熟悉 SFML 的人可以回答这个问题,我将不胜感激。另外,sf是什么?站在这里?

#pragma once
#include "SFML/Window.hpp"
#include "SFML/Graphics.hpp"
class Game
{

public:
  static void Start();

private:
  static sf::RenderWindow _mainWindow;
};

【问题讨论】:

  • SFML 假定您已经精通 C++。请不要学习 SFML 来学习 C++。如果你想学习 C++,你应该得到一个专门的C++ book
  • 你的书真的推荐static sf::RenderWindow吗?那很糟。它可能会导致许多用户崩溃。 en.sfml-dev.org/forums/index.php?topic=12885.0
  • 我对这些概念有些熟悉。我正在尝试通过一个已经开发的项目来测试我对概念的理解。
  • 您能推荐任何现有的项目(并且在概念上是正确的),并且可以帮助我加强我的面向对象概念

标签: c++ sfml


【解决方案1】:

sf 是命名空间,类似于stdcout 的命名空间。从技术上讲,它意味着“简单和快速”,但除了提供一个独特的上下文来定义函数之外,它实际上没有任何意义。 这样,例如,您可以在 foobar 命名空间中都有一个 printNumber() 函数,具有不同的实现,并且您可以使用 foo::printNumber()bar::printNumber() 调用它们中的每一个。这是一种组织技术。

在这种情况下,static_mainWindow 成员意味着无论您创建多少个 Game 类实例,都只会创建一个实例,那里永远只有一个 _mainWindow。因此,您不会像往常一样访问它,this->mainWindow,但由于该实例独立于任何特定的游戏实例,您可以使用Game::_mainWindow 访问它。不确定 这可能只是为了确保只打开一个窗口。

注意:namespacestatic 都使用语法 foo::bar,意思是“在上下文 foo 中查找 bar”。

【讨论】:

  • 这里static的解释感觉有点怪。 static 是一个存储持续时间,与类型安全无关。 static 也没有“使用”范围解析运算符。一个类只是定义了一个范围,static 不会以任何方式改变它。此外,正确的语法不是this.mainWindow,而是this->_mainWindow,尽管_mainWindow 可以在任何成员函数中工作。
  • 存储持续时间(即对象的生命周期和位置)和类型(即基元、类、指针、引用等)是正交的,基本上可以任意组合使用。此外,SRO :: 不能过载。你在找name lookup吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 2019-11-05
  • 1970-01-01
  • 2018-12-03
  • 2019-01-31
相关资源
最近更新 更多