2016-08-18 4 views
-3

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!

+1

Ich glaube, Sie vergessen haben, sie tatsächlich zu erklären als statisch. –

+0

Ah ja, danke ... !! Ich habe es gerade repariert .... – Karnivaurus

+0

Ich würde sagen, das ist nicht zu empfehlen. Obwohl SO rechtfertigte Fragen schließt. – drescherjm

Antwort

1

Wenn Sie nur globale Variablen/Funktionen gruppieren möchten (wie Sie es scheinbar tun), legen Sie sie einfach in einen Namensraum.

OTOH, was Sie zu tun scheinen sieht viel wie das Singletonmuster, hier können Sie einige Vorschläge und eine Tonne Links finden/düpiert:

C++ Singleton design pattern

Verwandte Themen