一、函數重載
兩個以上函數,名字相同,但參數的類型或個數不同,返回值可能不同。編譯器可知道在不同情況下調用哪個函數。
包括:構造函數重載,類成員函數重載,類以外的一般函數的重載
二、運算符重載
1、用成員函數重載運算符
class A
{A operator (運算符) (A a);//一般運算符是+ — * /,即運算有後第三個數產生,函數體聲明類,返回類
void operator (運算符) (A a);//一般是= += -=,即在原來數的基礎上運算
};
可實現同類,不同對象之間的加減乘除等。
2、用友元重載運算符
既然是友元,就是獨立於類外的一般函數。所以形參要全部給出:
class A
{ friend A operator (運算符) (A a1,A a2);
};
可實現a1,a2之間的各種運算
3、1,2的區別
當重載函數爲成員函數時,二元運算符的左操作數爲調用重載函數的對象。右操作數爲實參。
當重載函數爲友元函數時,二元運算符的左操作數爲調用重載函數的第一個實參。右操作數爲第二個實參。
4、++ --的重載
對於“++”、“――”運算符存在前置運算與後置運算的問題,因此,運算符重載函數必須分爲兩類。
1)成員函數
前置“++”運算符重載的一般格式爲:<類型> operator ++ ();
後置“++”運算符重載的一般格式爲:<類型> operator ++ ( int );
2)友元函數
前置“++”運算符重載的一般格式爲:<類型> operator ++ ( 類名 &);
後置“++”運算符重載的一般格式爲:<類型> operator ++ ( 類名 &,int );
其中:形參爲要實現“++”運算的對象,int 只是用於區分是前置還是後置運算符,並無整型數的含義。
當類中的私有的自加變量只有一個時,類型可爲void
5、()[]的重載
多用於矩陣中,計算元素位置。
6、new delete的重載
1)覆蓋缺省定義的全局方式
2)只針對一個類的局部方式
7、= 的重載
可重載爲成員函數,且不能被繼承。
一般系統每個類都生成一個缺省的賦值運算符。但容易產生指針懸掛問題,就是賦值後原來的區域被封鎖起來,沒有被釋放。當執行析構函數時,被賦值的區域又被釋放了2次。
歡迎我的新浪博客:http://blog.sina.com.cn/barbarac