2010-04-14 69 views
3

我對C/C++非常非常陌生,不確定該方法的調用方式。但這就是爲什麼我在這裏試圖找到答案。讓我告訴你一個例子在構造函數旁聲明的屬性

MyClass::MyClass() : valueOne(1), valueTwo(2) 
{ 
     //code 
} 

凡valueOne和valueTwo是被在身體外面賦值類的屬性,什麼方法是這樣叫,爲什麼它這樣做的方式。爲什麼不這樣做

MyClass::MyClass() 
{ 
     valueOne = 1; 
     valueTwo = 2 
     //code 
} 

如果任何人都可以幫助我,這將是偉大的。

回答

7

這是一個initializer list。您可以在構造函數之後使用初始化器列表初始化您的成員變量。

默認情況下,構造函數將通過調用其默認構造函數來自動創建作爲成員變量的對象。通過使用初始化程序列表,您可以指定使用其他構造函數。有時如果你的成員變量沒有沒有參數的構造函數,你必須使用初始化列表。

1

這被稱爲initialization list。這主要是爲了性能(具有較大的對象)或一致性(使用內置類型,如int)。

1

最好在初始化程序列表中初始化成員。在你的情況下,這並不重要,但是不可能像你在第二個代碼片段中那樣初始化int &。它是唯一可以將參數傳遞給基類構造函數的地方。

2

由於效率和性能原因,初始化列表(前一種樣式)通常是首選。就我個人而言,我更喜歡它們的代碼可讀性的原因,因爲它將簡單初始化與構造函數本身中的任何複雜邏輯分開。

0

另請注意,如果僅用於引用BASE類中的數據字段或成員函數,那麼這個指針可在初始化程序列表中訪問。

相關問題