我仍在學習C++並試圖理解它。我一直在尋找通過一些代碼,看到:構造函數冒號後面的變量
point3(float X, float Y, floatZ) :
x(X), y(Y), z(Z) // <----- what is this used for
{
}
是什麼意思 「X(X),Y(Y),Z(Z)」 坐構造函數的參數旁邊?
我仍在學習C++並試圖理解它。我一直在尋找通過一些代碼,看到:構造函數冒號後面的變量
point3(float X, float Y, floatZ) :
x(X), y(Y), z(Z) // <----- what is this used for
{
}
是什麼意思 「X(X),Y(Y),Z(Z)」 坐構造函數的參數旁邊?
這是一種調用point3類成員構造函數的方法。如果x,y和z是浮動,那麼這只是一個寫的更有效的方式這
point3(float X, float Y, float Z):
{
x = X;
y = Y;
z = Z;
}
但是,如果X,Y & z爲類,那麼這是參數傳遞到它們的構造函數的唯一途徑
澄清:如果成員是非PoD類型,那麼如果使用初始化列表,那麼成員將不會被默認構造,並且不需要在這些成員上調用複製構造函數。因此,它更有效率。 – greyfade 2010-02-28 03:50:53
**'PoD' =「普通舊數據」 – isomorphismes 2015-06-15 17:38:44
在您的例子point3
是具有相同名稱(point3
)類的constructor,開口支架{
是initialization list,前東西到結腸:
右邊這反過來構建體(即,初始化)point3
的成員變量(和也可用於將參數傳遞給在基類構造函數[ES],如果有的話。)
成員初始化像其他人指出的那樣。 但是,知道以下內容更重要:
當參數的類型爲float或其他內置類型時,除了使用成員初始化而非賦值(在構造函數的主體中)之外沒有明顯的優點,在C++中更加慣用。
明顯的優點是,如果參數是用戶定義的類,則此成員初始化將導致調用複製構造函數,而不是使用默認構造函數(如果使用賦值(在構造函數的主體中))。
重複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