這次作業是要我們熟悉operator overloading的使用

可能overloading是C++超重要的特徵

詳細做法其實課本上都寫的很清楚

網路上的資源也是多到看不完~@@

所以就只對自己覺得要多注意的部份筆記

什麼是overloading?

1.function overloading

同一個命名區間 (name space) 中兩個函式

有同樣的名稱但是具有不同的參數個數

或是參數型態的稱為多載函式

2.operator overloading


簡單來說 就是把運算符號(+,-,*,/)的作用範圍

從以往的built-in data type(int ,float,...)的變數資料

延伸到使用者自訂的物件 

而在實做operator overloading時

我們又常以friend function的方式來做

先在這裡區別一下member function 跟 friend function

一般C++的class形式大概如下

class myclass
{
    public:
                fun1();        //member function
                fun2():
    private:
               int data1;    //member variable
               int datat2:
}        

class的好處就是要讓物件能有所封裝

當要存取物件中private的member variable時

就一定要透過public的member function

這樣我們物件的資料就不會隨便被其他動作所影響

但每次要存取private變數都要透過member function

就製作程式的效率上來講 是有點低落的

所以friend function就是要來解決這些問題

他的好處就是不必透過class中的member function

就能直接對private 的變數做存取

*friend function的使用方法

其實就跟一般member function的使用方式一樣

在public裡作宣告

實作部份寫在另一個.cpp檔

但要注意的是:friend function 不為 member function!

以下舉兩個member function 及 friend function的例子

Norm函式是用來取得real 跟imag兩個數的平方合

他們在class中的宣告方式

class Complex {
             public:
                          //member function
                          int getreal();
                          int getimag():
                          double Norm();
                          //friend function
                          friend double Norm(const Complex& x);
             private:
                          int real;
                          int imag;
}


以下是他們的實作部份

// member function
double Complex::Norm()
{
    return (real*real+imag*imag); 
    //因為是member function
    //所以直接對呼叫的物件變數處理

}

//non-member function
double Norm(const Complex& x)
{
    return(x.getreal()*x.getreal()+x.getimag()*x.getimag());
    //一般函式需透過其他member function才能對
    //private的變數做處理

}


//friend function
double Norm(const Complex& x)
{
    return (x.real*x.real+x.imag*x.imag);
    //可直接對傳進來的物件做private資料的存取
}
---------------------------------------------------------------
這次作業比較簡單一點

寫完之後對overloading的概念就能更清楚了

也覺得能發明這種方式的人真是天才

這樣能程式設計師能以更直觀的方式去coding

邊寫邊學邊讚嘆阿~~~XDDD

































arrow
arrow
    全站熱搜

    molimomo 發表在 痞客邦 留言(2) 人氣()