大量使用静态成员变量是一种好习惯吗?

时间:2016-08-18 19:02:44

标签: c++

由于某人没有接受过任何正式的编程培训,我想知道我的C ++编码方法是否被视为良好实践。具体来说,我在谈论使用其成员都是静态的类。这是我经常使用的模型,用于我确定该类只会被实例化一次的情况,并且我希望能够从我的代码中的任何位置访问该类。但是,由于周围有大量static个关键字,而且我必须在类定义之外显式初始化这些变量,因此它看起来有点奇怪。

例如,如果我正在编写游戏,可能会有几个类我只实例化一次并希望从任何地方访问。这些类可以是Graphics,用于表示要呈现的颜色和形状World,以表示我的角色所居住的世界User,以表示当前的游戏人类玩家,Score,代表当前得分等。我通常将它们创建为“静态”类,因为我可以从我的代码中的任何位置访问它们。如果它们是“非静态”类,那么我将不得不继续传递指向这些对象的指针。

因此,对于足球比赛,我的代码可能如下:

// world.h

class World
{
public:
  static float pitch_colour;
  static float pitch_size;
  static float player_colour;
  static float player_size;
  static int num_players;
  static std::vector<Player> players;

  static void UpdatePositions();
};



// world.cpp

float World::pitch_colour = 0.9;
float World::pitch_size = 100;
float World::player_colour = 0.3;
float World::player_size = 5;
int World::num_players = 10;
std::vector<Player> World::players = std::vector<Player>(World::num_players);

void World::UpdatePositions()
{
    for (int i = 0; i < num_players; i++)
    {
        players[i].UpdatePosition();
    }
}



// main.cpp

int main()
{
    while (true)
    {
        World::UpdatePositions();
        Graphics::DrawPitch(World::pitch_size, World::pitch_colour);
        for (int i = 0; i < World::num_players; i++)
        {
            Graphics::DrawPlayer(&World::players[i], World::player_size, World::player_colour);
        }
     }
 }

这种代码运行良好,但我只是想知道是否使用这样的大量静态类是一种典型的方法,还是有更强烈推荐的东西?谢谢!

1 个答案:

答案 0 :(得分:1)

如果你只是想对全局变量/函数进行分组(就像你在这里看到的那样),只需将它们放在命名空间中即可。

OTOH,你似乎在做什么看起来很像单身模式,在这里你可以找到一些建议和大量的链接/欺骗:

C++ Singleton design pattern