2017-07-25 3 views
1

J'ai une question. Je veux appeler un constructeur de "gameWindow" de la classe "Game". Le problème est que si je l'appelle du constructeur il s'initialise en tant que variable locale (exemple A), si je le définis en tant que membre privé - je ne peux pas utiliser les arguments d'un constructeur. Comment puis-je faire gamewindowObj en tant que membre d'un constructeur?Comment utiliser les arguments du constructeur pour appeler un constructeur d'une autre classe en C++?

// exemple А

class Game{ 
public: 
    Game(int inWidth, int inHeight, char const * Intitle); 
}; 

Game::Game(int inWidth, int inHeight, char const * Intitle){ 
    gameWindow gamewindowObj=gameWindow(inWidth, inHeight, Intitle); 
} 

// exemple В

class Game{ 
public: 
    Game(int inWidth, int inHeight, char const * Intitle); 
private: 
    gameWindow gamewindowObj=gameWindow(inWidth, inHeight, Intitle); 
}; 
Game::Game(int inWidth, int inHeight, char const * Intitle){} 
+0

Utilisez les constructeurs liste initialiseur: 'Game (int inWidth, ....): gamewindowObj (inWidht, ...) {}' – user463035818

Répondre

7

Si vous voulez gamewindowObj être membre de données et être initialisé par les arguments du constructeur, vous pouvez utiliser member initializer list, par exemple

class Game{ 
public: 
    Game(int inWidth, int inHeight, char const * Intitle); 
private: 
    gameWindow gamewindowObj; 
}; 

Game::Game(int inWidth, int inHeight, char const * Intitle) 
    : gamewindowObj(inWidth, inHeight, Intitle) { 
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
} 
+0

Merci beaucoup, @songyuanyao – petriichuk

+0

De plus, à l'OP. Il est parfois utile d'écrire une fonction qui peut être utilisée pour initialiser 'gameWindow' s'il ne s'agit pas seulement de réutiliser des arguments. 'gameWindow && initGameWindow (int arg1, int arg2) {/ * choses complexes * /}' –