Auflistung von Instanzen
-
Wenn du player.getName() von einer Funktion aus aufrufst, die eine Methode von Game ist, geht das sehr wohl.
Wenn du player.getName() von einer Funktion A aus aufrufst, die keine Methode von Game ist, sollte A zumindestens von einer Funktion aus aufgerufen werden, die eine Methode von Game ist (ich hoffe ich mache das jetzt nicht zu kompliziert für dich). In dem Fall kannst du beim Aufruf von A einfach eine Refenrenz auf Player übergeben.
Singleton hätte ich dir wohlmöglich auch vorgeschlagen, aber ich hatte noch deine anderen Posts im Hinterkopf, und das sieht mir zumindest auf den ersten Blick so aus als könntest du soweit erst mal ohne das Singleton Pattern auskommen (kann natürlich auch sein, daß ich mich da irre; hab ja schließlich nur Ausschnitte deines Entwurfs gesehen).
-
Das Problem dabei ist nur:
Wenn die Klasse "Player" mehr als 20 Methoden hat, dann müsste ich in die Klasse "Game" auch alle diese Methoden schreiben. Das würde ich mir gerne ersparen und es macht den Code vermutlich auch nicht besser...
-
Hm, offenbar habe ich mich doch zu kompliziert ausgedrückt. Natürlich mußt du die Methoden von Player nicht nach Game kopieren.
Ich versuch mal mir ein Beispiel für eine Game-Klasse aus den Fingern zu saugen (Code ungetestet).
// Game.h #include "Player.h" class Game { Player d_player; bool d_running; void createPlayer(); char getCommand(); void executeCommand (char c); public: Game(); void play(); };// Game.cpp void Game::createPlayer() { // Namen einlesen, usw. } char Game::getCommand() { // Optionen ausgeben und von cin einen Befehl einlesen } void Game::executeCommand (char c) { // Befehl ausführen // an dieser Stelle kann zum Beispiel soetwas stehen wie d_player.getName(); } Game::Game() { // verschiedenes Zeugs } Game::play() { createPlayer(); while (d_running) { char c = getCommand(); executeCommand (c); } }Edit: Rechtschreibung
Edit: Noch mal Rechtschreibung, bah!
Edit: Groß- und Kleinschreibung! Hilfe!
-
Ich muss mich näher mit Klassen beschäftigen...
Jedenfalls ist es mir im Moment lieber, game.getPlayer(). zu verwenden.