這次作業是要我們熟悉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
- Apr 23 Wed 2008 17:15
[Object-Oriented Programming] HW3-Operator Overloding
全站熱搜
留言列表
發表留言