2011-06-13 4 views
1
NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){ 
} 

Le premier est un espace de noms et le second est le nom de la fonction. et quels sont ces trois paramètres? Je pense que cela pourrait être lié à l'héritage mais ce n'est pas le nom de la classe. Ce sont les variables privées.Comment interpréter ce code C++?

Merci d'avance.

Répondre

12

C'est la définition d'un constructeur - il n'y a pas d'espaces de noms.

NetworkManager :: NetworkManager() : m_Thread(0), m_Continue(true), m_Init(false){ 
} 

Le constructeur est pour une classe appelée NetworkManager, et il initialise ses membres en utilisant une liste d'initialisation. Qu'est-ce qui se passe est conceptuellement (sinon complètement avec précision):

NetworkManager :: NetworkManager() { 
     create "empty" NetWorkManager object 
     initialise its m_Thread with zero 
     set its m_Continue to be true 
     set its m_Init to be false 
} 

Vous utilisez alors le constructeur pour créer un objet entièrement initialisés:

NetworkManager manager; 

Initialiser comme celui-ci est l'affectation préféré sur dans le corps du constructeur pour plusieurs raisons:

  • de nombreux types ne supportent pas l'affectation
  • il est généralement plus efficace
  • il supprime la possibilité d'objets non initialisées dans le reste du code constructeur
+1

Quel est l'avantage d'utiliser ce lieu de mettre ceux dans le corps du constructeur? – codereviewanskquestions

+3

@LCYSoft: Parce que lorsque vous les mettez dans le corps du constructeur, les variables membres seront initialisées par défaut, puis les valeurs leur seront assignées. Pour certains types de données, cela est moins efficace que de simplement les initialiser immédiatement. Plus important encore, il y a quelques types de données où vous devez * required * utiliser la syntaxe 'ctor-initializer' pour l'initialiser (par exemple, quand vous devez passer des arguments aux constructeurs de variables membres, membres const, etc) . –

+0

Merci beaucoup! – codereviewanskquestions

1

C'est un constructeur de classe en utilisant la syntaxe d'initialisation de membre pour définir des champs (ou appeler les constructeurs de classe de base) avant d'exécuter son corps.

1

Ceci est un constructeur pour la classe NetworkManager, qui possède (au moins) 3 membres membres m_Thread, m_Continue, m_Init, qui sont respectivement définis sur 0, True et False.

3
NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){ } 

Le code utilise une caractéristique de C++ appelé Listes initialiseur. Il initialise les membres de la classe NetworkManager avant que le constructeur de NetworkManager ne soit appelé.

Il fait simplement:

m_Thread = 0; 
m_Continue = true; 
m_Init = false;