使用C ++的静态类

时间:2015-01-13 21:02:40

标签: c++ oop static-variables

首先我要说的是,我理解“静态类”不是C ++中使用的东西,但我认为该类所持有的所有信息都应该是静态的。我试图了解是否有更好的方法来解决我的问题。

示例:我正在构建一个类来维护游戏window的信息,因此我可以访问当前window的{​​{1}}和{{ 1}}来自对象的任何实例。当我调整大小,最小化,最大化等时,将编辑此类。我的视频游戏将永远不会有两个单独的窗口,只有单独的实例,它们都应包含相同的数据。这就是我所拥有的:


window.h中

width

Window.cpp

height


<小时/>

使用此方法,我可以从对象的任何实例中检索class Window { static int width; static int height; public: Window(); Window(int width, int height); static int getWindowWidth(); static int getWindowHeight(); } 的{​​{1}}及其#include "Window.h" int Window::width = 0; int Window::height = 0; Window::Window( ) { } Window::Window(int window_width, int window_height) { width = window_width; height = window_height; SDL_CreateWindow( "Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_SHOWN ); } int getWindowWidth() { return width; } int getWindowHeight() { return height; }

然而,它感觉不正确(或优雅),因为使用此方法,我现在必须将每个变量列为window,并且每个变量都必须在我width之外的地方启动height代码(因为您不应该在C ++中使用静态类)。

如何在不创建静态类的情况下从多个实例访问static的信息?


提前致谢

1 个答案:

答案 0 :(得分:3)

您似乎对静态变量一无所知,因为这个问题没有意义。共享静态信息的方式是将变量声明为静态!这确保了无论您创建的类的实例数是多少,都只存在一个变量。

你要找的是一个单身人士,因为你只有一个窗口。为此,请将其添加到您的班级:

class Window {
    Window(int width, int height);
    int width;
    int height;
public:
    static Window& getInstance();
    int getWidth() const {return width;} 
    int getHeight() const {return height;} 
}

static Window::Window& getInstance()
{
    static Window instance; 
    return instance;
}

每当您需要一个窗口时,您将使用getInstance()函数获取它。这将确保在程序生命周期中只存在一个窗口