1. 程式人生 > 實用技巧 >non-explicite-one-argumen-constructor

non-explicite-one-argumen-constructor

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; };

註解:

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