2013-10-31 57 views
-1

爲什麼在使用另一個對象的副本初始化類對象的構造函數時它不起作用?
爲什麼在通過複製對象初始化時類構造函數不工作?

class Human 
{ 
    int No; 
    public: 
     Human(int arg):No(arg) 
     { 
     cout<<"constructor Works"<<endl; 
     } 
}; 
int main() 
{ 
    Human a{10}; // constructor Works for object a 
    Human b{a}; //why b object's constructor dont work? 
} 
+1

你沒有複製構造函數 – aaronman

+5

「不工作」是什麼意思? – juanchopanza

+1

好的,你正在使用*拷貝構造函數*,它可以工作,但是不會向stdout輸出任何東西。 – juanchopanza

回答

4

「不行」你的意思是在運行代碼後沒有輸出到屏幕?那當然沒有 - Human b{a}Human a{10}調用完全不同的構造函數。它調用編譯器生成拷貝構造,這是署名爲:

Human(Human const& other) 

如果你希望這是在拷貝構造輸出,只需創建自己:

class Human 
{ 
    // ... 
    Human(Human const& other) 
     : No{other.No} 
    { 
     std::cout << "copy-constructor\n"; 
    } 
}; 
8

你需要一個拷貝構造函數,否則編譯器會生成一個(不輸出任何東西)。添加:

Human(const Human& h):No(h.No) { std::cout << "copy-ctor" << std::endl; } 
+3

現在等待傳入「我有一個複製構造,但它看起來像編譯器沒有調用它,這是一個錯誤嗎?」 – GManNickG

+0

@GManNickG爲什麼?OPs類型不是聚合類型,是嗎? –

+0

@GManNickG但是你知道這是一個bug!我發誓它是這樣的! – 2013-10-31 19:51:00

相關問題