2013-09-24 49 views
-1

比方說,我有類:C++的構造函數自動變量分配

class foobar { 
public: 
    foobar(int _x, int _y) { 
     x = _x; 
     y = _y; 
    } 
    int x, y; 
}; 

有什麼辦法來分配x和y傳遞給foobar的值(INT,INT),而不是分配給他們自己?

【答案】 初始化列表是什麼,我需要使用(感謝所有爲澄清)

我可以編寫代碼這樣:

class foobar { 
public: 
    foobar(int x, int y) : x(x), y(y) {} 
    int x, y; 
}; 

這意味着我不必強調我的輸入參數x(x)將按預期工作

+0

是否有一個原因,你不想分配它們的值 – anonymous

+0

你是什麼意思分配值而不是分配它們?你確定你的分配方向正確嗎?你的問題意味着你想覆蓋輸入變量。 – juanchopanza

+0

謝謝大家的意見,結果Kerreck和Pierre是完全正確的,我想用的是所謂的「初始化列表」。謝謝! – Parad0x13

回答

2

您可以使用member-initialization-list。它仍然是你的工作,但它是一個更好的做法:

foobar(int _x, int _y): x(_x), y(_y) { 
//     ^^^^^^^^^^^^^^ 
} 

如果你真的不想要指派這些值可以初始化一個類的成員,沒有構造函數(aggregate class):

class foo 
{ 
public: 
    int x, y; 
}; 
foo{1, 2}; // <= Braces initialization 

工作示例:http://ideone.com/NlbkKb

2

如果你的類是一個聚合,你可以用括號的語法初始化:

class foobar 
{ 
public: 
    int x; 
    int y; 
}; 

foobar f { 1, 2 }; 

否則,你應該初始化在構造函數中的元素:

class foobar 
{ 
public: 
    foobar(int x_, int y_) : x(x_), y(y_) { } 
private: 
    int x; 
    int y; 
}; 

foobar f(1, 2); 

(您也可以使用在第二種情況下的大括號語法)