NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){
}
第一個是名稱空間,第二個是函數的名稱。那三個參數是什麼?我認爲它可能與繼承有關,但這些不是類名。這些是私有變量。如何解釋這個C++代碼?
在此先感謝。
NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){
}
第一個是名稱空間,第二個是函數的名稱。那三個參數是什麼?我認爲它可能與繼承有關,但這些不是類名。這些是私有變量。如何解釋這個C++代碼?
在此先感謝。
這就是構造函數的定義 - 沒有名稱空間。
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;
初始化這樣優於分配在構造函數的身體有以下幾個原因:
這就是執行其身體之前,使用構件初始化語法來設置字段(或調用基類的構造函數)一類的構造的其餘部分的可能性。
這是NetworkManager類的一個構造函數,它具有(至少)3個成員數據成員m_Thread,m_Continue,m_Init,它們分別設置爲值0,True和False。
NetworkManager::NetworkManager():m_Thread(0), m_Continue(true), m_Init(false){ }
該代碼使用稱爲初始化列表的C++特性。它在調用NetworkManager
的構造函數之前初始化類NetworkManager
的成員。
它根本:
m_Thread = 0;
m_Continue = true;
m_Init = false;
什麼是使用這個,而不是把這些到構造函數的身體優勢? – codereviewanskquestions 2011-06-13 07:28:19
@LCYSoft:因爲當你把它們放在構造函數體中時,成員變量將被默認初始化,然後這些值將被賦值給它們。對於某些數據類型,這比僅僅立即初始化它們效率低。更重要的是,有一些數據類型需要*使用'ctor-initializer'語法來初始化它(例如,當你需要將參數傳遞給成員變量,const成員等的構造函數時) 。 – 2011-06-13 07:30:00
非常感謝你! – codereviewanskquestions 2011-06-13 07:31:50