SFML - статическое определение объекта - PullRequest
0 голосов
/ 10 мая 2019

Я новичок в объектно-ориентированном программировании.Я шел через некоторый код, чтобы изучить некоторое объектно-ориентированное программирование.Игра от Scratch C ++ содержит некоторый код для игры под названием 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;
};

1 Ответ

1 голос
/ 10 мая 2019

sf - это пространство имен, аналогично std - это пространство имен для cout. Технически это означало бы «Простой и быстрый», но на самом деле не имеет никакого значения, кроме как предоставить уникальный контекст для определения функций. Это сделано для того, чтобы, например, вы могли иметь функцию printNumber() в пространствах имен foo и bar с различными реализациями, и вы могли бы вызывать каждое из них с помощью foo::printNumber() и bar::printNumber(). Это метод организации.

В этом контексте член static _mainWindow означает, что создан только один экземпляр, независимо от того, сколько экземпляров класса Game вы создадите, будет только один _mainWindow. Из-за этого вы не будете получать к нему доступ, как обычно, this->mainWindow, но поскольку экземпляр не зависит от какого-либо конкретного экземпляра Game, вы получаете к нему доступ с помощью Game::_mainWindow. Не уверен. Вероятно, это просто для того, чтобы когда-либо было открыто только одно окно.

Примечание: и namespace, и static используют синтаксис foo::bar, что означает "искать строку в контексте foo".

...