Als jemand ohne irgendeine formelle Ausbildung in Programmierung, würde ich gerne wissen, ob meine C++ - Codierung Ansatz als gute Praxis gilt. Insbesondere spreche ich über die Verwendung von Klassen, deren Mitglieder alle statisch sind. Dies ist ein Modell, das ich häufig benutze, wenn ich sicher bin, dass die Klasse nur einmal instanziiert wird und ich von überall in meinem Code auf diese Klasse zugreifen möchte. Es neigt jedoch dazu, wegen der großen Anzahl von static
Schlüsselwörtern herum ein wenig seltsam zu sein, und die Tatsache, dass ich diese Variablen außerhalb der Klassendefinition explizit initialisieren muss.Ist es eine gute Praxis, statische Elementvariablen stark zu verwenden?
Zum Beispiel, wenn ich ein Spiel schreibe, kann es mehrere Klassen geben, die ich nur einmal instanziiere und von überall aus zugreifen möchte. Diese Klassen könnten Graphics
sein, um die Farben und Formen darzustellen, World
, um die Welt darzustellen, in der meine Charaktere leben, User
, den gegenwärtigen menschlichen Spieler des Spiels darstellend, Score
, den gegenwärtigen Kerbe, etc. darzustellen I würde diese normalerweise als "statische" Klassen erstellen, weil ich dann von überall in meinem Code auf sie zugreifen kann. Wenn es sich um "nicht statische" Klassen handelte, musste ich weiterhin Zeiger auf diese Objekte weitergeben.
Also, für ein Fußballspiel, könnte meinen Code wie folgt aussehen:
// 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);
}
}
}
Diese Art von Code läuft gut, aber ich frage mich nur, ob viele statische Klassen wie diese ist ein typischer Ansatz, oder ob es etwas mehr zu empfehlen gibt? Vielen Dank!
Ich glaube, Sie vergessen haben, sie tatsächlich zu erklären als statisch. –
Ah ja, danke ... !! Ich habe es gerade repariert .... – Karnivaurus
Ich würde sagen, das ist nicht zu empfehlen. Obwohl SO rechtfertigte Fragen schließt. – drescherjm