1、
Widget w1; //呼叫Default構造方法
Widget w2(w1); //呼叫copy構造方法
w1 = w2; //呼叫copy賦值操作符
Widget w3 = w2; //呼叫copy構造方法
2、 對於Widget w3 = w2; 是呼叫copy構造方法,為什麼?
因為定義一個物件的時候,肯定要呼叫構造方法。因此,對於Widget w3(w2) 和Widget w3 = w2表達的意思一樣,都是以W2為藍本,copy構造物件W3。
3、方法呼叫做了兩件事:a、用實參初始化形參;b、控制權交給被調方法。
被調方法的執行,以形參的定義和初始化開始。舉例來說:
getName(Person p);
Person p1;
string name = getName(p1);
呼叫方法getName(p1)的時候,在方法getName(Person p)內部,首先定義並且初始化p,執行 Person p = p1,也就是以p1為藍本copy構造p,注意這裡不是copy賦值。因此,呼叫方法,pass-by-value,意味著呼叫copy構造方法。