non-explicite-one-argumen-constructor
阿新 • • 發佈:2020-08-16
class Fraction { public: Fraction(int num,int den=1):m_numerator(num),m_denominator(den) { cout << "建構函式被默默呼叫了哦!!!" << endl; } ~Fraction(){ cout << "解構函式被默默-呼叫了哦!!!" << endl; } Fraction operator +(const Fraction& f) { return Fraction (......); }private: double m_numerator; double m_denominator; };
註解:
- 藍色這種函式相當特別,特別把這一種建構函式叫做non-explcit-one-argument ctor.
- argument代表實參,但後一個引數有初值,所以此時要建立一個Fraction的物件,只要提供一個實參就行了。因為第二個實參有預設值。這樣的設計是合理的,因為在數學上,3等於1分之3,分母預設1.
- 這個藍色背景的函式屬於two parameter, one argument.後者的意思是隻要一個實參就夠了。給兩個實參也可以的。
- explicite是個關鍵字,可以出現在建構函式的前面,現在沒有出現,所以就叫做non-explicit-one-argument ctor.
- Fraction d2=f+4; 這一句會讓編譯器尋找‘+’這個動作,它找到了,就是函式operator+() . +要作用在左邊的運算元上,左邊的f呼叫+,但是它發現+的右邊的運算元也是一個Fraction(注意,類的成員函式有個隱含的this指標),而實際呼叫的時候卻是f+4,右邊的運算元不是Fraction型別的物件。此時編譯器會看看能不能把4轉換為Fraction型別的物件,如果有4能轉換為Fraction,那就是分數+分數,就符合那個成員函式的設計了。