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

第一個是名稱空間,第二個是函數的名稱。那三個參數是什麼?我認爲它可能與繼承有關,但這些不是類名。這些是私有變量。如何解釋這個C++代碼?

在此先感謝。

回答

12

這就是構造函數的定義 - 沒有名稱空間。

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

構造函數用於名爲NetworkManager的類,它使用初始化列表初始化其成員。這是怎麼回事是概念(如果不是完全準確):

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 
} 

然後,您使用構造函數來創建一個完全初始化的對象:

NetworkManager manager; 

初始化這樣優於分配在構造函數的身體有以下幾個原因:

  • 許多類型不支持分配
  • 它通常更有效
  • 它消除未初始化的對象的在構造代碼
+1

什麼是使用這個,而不是把這些到構造函數的身體優勢? – codereviewanskquestions 2011-06-13 07:28:19

+3

@LCYSoft:因爲當你把它們放在構造函數體中時,成員變量將被默認初始化,然後這些值將被賦值給它們。對於某些數據類型,這比僅僅立即初始化它們效率低。更重要的是,有一些數據類型需要*使用'ctor-initializer'語法來初始化它(例如,當你需要將參數傳遞給成員變量,const成員等的構造函數時) 。 – 2011-06-13 07:30:00

+0

非常感謝你! – codereviewanskquestions 2011-06-13 07:31:50

1

這就是執行其身體之前,使用構件初始化語法來設置字段(或調用基類的構造函數)一類的構造的其餘部分的可能性。

1

這是NetworkManager類的一個構造函數,它具有(至少)3個成員數據成員m_Thread,m_Continue,m_Init,它們分別設置爲值0,True和False。

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

該代碼使用稱爲初始化列表的C++特性。它在調用NetworkManager的構造函數之前初始化類NetworkManager的成員。

它根本:

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