2011-12-10 30 views
0

我有一個簡單的類測試引用變量從外面CALSS但這種情況並非如此:你怎麼能在默認的構造函數

int _tmain(int argc, _TCHAR* argv[]){ 
    int c=10; 
    test t1(c); 
    c=20; 
    int d=t1.a;;} 

這裏D取的原始值10,而不是20.爲什麼是它的情況下,你如何可以改變的構造,能夠通過C到manuipulate一個。

感謝您

+4

你在這裏沒有使用默認的構造函數。 –

回答

2

成員必須是一個參考,你需要在初始化列表來初始化它,就像這樣:

class test{ 
public:  
    test(int &input) 
     :a(input) 
    {}  
    int &a; 
}; 

你不能在體內,因爲所有分配給它引用需要初始化。當你到達身體的時候,已經太晚了,初始化已經發生了。你也不能擁有你的默認構造函數,因爲你必須有一些東西來初始化引用,並且沒有參數,這意味着你必須使用全局的,另一個int成員,或者動態地創建一個新的int非常糟糕的想法)。

+0

謝謝你本傑明。這很有幫助。請看這篇文章,因爲上面的斷點如果類是由一個指針啓動的​​。(http://stackoverflow.com/questions/8467640/why-does-referencing-break-when-done-through-pointers) –

4

這不是構造函數的問題,而是成員變量的問題。它是int,這是一個完全不相關的新的int。要使用它,請使用int&。然後,你也不能有一個默認的構造函數,你必須使用初始化列表:

class test{ 
public: 
    test(int &input):a(input){} 
    int& a; 
}; 
+0

謝謝非常。這對於載體類測試似乎有點棘手。測試( 測試(向量&input):a(input){} vector & a; }; –

+0

@AElansary:如果向量或其他任何東西都應該沒有區別,那麼引用就是引用。 – Xeo

相關問題