重載

一、函數重載

兩個以上函數,名字相同,但參數的類型或個數不同,返回值可能不同。編譯器可知道在不同情況下調用哪個函數。

包括:構造函數重載,類成員函數重載,類以外的一般函數的重載

二、運算符重載

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章