2010-02-28 24 views
15

我仍在學習C++並試圖理解它。我一直在尋找通過一些代碼,看到:構造函數冒號後面的變量

point3(float X, float Y, floatZ) : 
x(X), y(Y), z(Z) // <----- what is this used for 
{ 
} 

是什麼意思 「X(X),Y(Y),Z(Z)」 坐構造函數的參數旁邊?

+1

重複http://stackoverflow.com/questions/1272680/c-constructor-syntax-question-noob。另請參見http://stackoverflow.com/questions/1632484/c-initialization-question – outis 2010-05-07 01:42:51

回答

17

這是一種調用point3類成員構造函數的方法。如果x,y和z是浮動,那麼這只是一個寫的更有效的方式這

point3(float X, float Y, float Z): 
{ 
    x = X; 
    y = Y; 
    z = Z; 
} 

但是,如果X,Y & z爲類,那麼這是參數傳遞到它們的構造函數的唯一途徑

+0

澄清:如果成員是非PoD類型,那麼如果使用初始化列表,那麼成員將不會被默認構造,並且不需要在這些成員上調用複製構造函數。因此,它更有效率。 – greyfade 2010-02-28 03:50:53

+1

**'PoD' =「普通舊數據」 – isomorphismes 2015-06-15 17:38:44

4

在您的例子point3是具有相同名稱(point3)類的constructor,開口支架{initialization list,前東西到結腸:右邊這反過來構建體(即,初始化)point3的成員變量(和也可用於將參數傳遞給在基類構造函數[ES],如果有的話。)

9

Initialization list

This文章(必讀)人所以解釋成員初始化列表

+3

不幸的是,必須閱讀的文章已不存在,並且在閱讀本文時,初始化列表頁面未加載。你可以擴大你的答案,所以死鏈接不是一個問題? – Ceribia 2017-02-14 15:20:17

0

成員初始化像其他人指出的那樣。 但是,知道以下內容更重要:

當參數的類型爲float或其他內置類型時,除了使用成員初始化而非賦值(在構造函數的主體中)之外沒有明顯的優點,在C++中更加慣用。

明顯的優點是,如果參數是用戶定義的類,則此成員初始化將導致調用複製構造函數,而不是使用默認構造函數(如果使用賦值(在構造函數的主體中))。

相關問題