當類中有多個構造函數時,建立對象時是不是都要調用如下面的程序 #include<iostream> using namespace std; class MyClass{ public: MyClass(int i=0){cout<<1;} MyClass(const MyClass&x){cout<<2;} MyClass& operator=(const MyClass&x){cout<<3; return*this;} ~MyClass(){cout<<4;} }; int main(){ MyClass obj1(1),obj2(2),obj3(obj1); return 0: } 其最後的輸出結果是什麼?MyClass(const MyClass&x){cout<<2;}這個構造函數什麼時候調用的?
建立obj3的時候 因爲 obj1已經存在的對象 用obj1對象 做參數 調用的構造函數 就是 它了MyClass(const MyClass&x){cout<<2;} 輸出 112444 建立 obj1 時調用構造函數 MyClass(int i=0){cout<<1;} 輸出1 建立 obj2 時調用構造函數 MyClass(int i=0){cout<<1;} 輸出1 建立obj3 時調用構造函數MyClass(const MyClass&x){cout<<2;} 輸出2 程序結束 調用析構函數 析構函數 調用規則是 先建立的對象 後析構 ,後建立的對象先析構 所以 先調用 obj3 的析構函數輸出4 然後 obj2 的析構函數輸出4 最後obj1 的析構函數輸出4