取負運算符“-”是一元運算符,當作為成員函數重載時參數表中沒有參數,那個惟一的操作數以this指針的形式隱藏在參數表中。當把取負運算符作為非成員函數重載時,那個惟一的操作數必須出現在參數表中!-”是一個典型的一元運算符,除了++、--外的其他一元運算符的用法與此類似。例如把取負運算符“-”當成員函數重載:類名operator-(){//函數體}。
2.重載加法運算符“+”
加法運算符“+”是一個二元運算符,當作為成員函數重載時參數表中只有1個參數,對應于第二個操作數,而第一個操作數是對象本身,以this指針的形式隱藏在參數表中。當把加法運算符作為非成員函數重載時,兩個操作數必須都出現在參數表中!+”是一個典型的二元運算符,除了賦值類運算符外的其他二元運算符的用法與此類似例如把加法運算符“+”作為友元函數重載的聲明形式:
friend類名operator+(參數1,參數2){//函數體}
3.重載運算符“++”和“- -”
C++中提供了一元自加(十+)與自減運算符(一)的前綴運算和后綴運算,兩者之間的最大差別在于說明的格式不同,對于++而言:
函數類型operator + +()//前綴運算
函數類型operator++(int) //后綴運算
由于在后綴情況下不需要使用形參,因此在函數定義中,只給出類型而沒有指定形參名,這是C++所允許的另外需要注意的是,若將++重載為友元運算符,由于它們要修改操作數,所以必須使用引用參數。對于--來說,與++的用法完全一樣。
4.重載類型轉換并“long”類型轉換符必須作為成員函數重載。在重載類型轉換符時,不需要返回值類型的聲明。
重載類型轉換符“long”的語法形式為:
operator long(參數表){//函數體}
其他類型轉換符的重載方法與此類似。
小提示:
=,[ ],(),->及所有的類型轉換運算符只能作為成員函數重載,而且是不能針對枚舉類型操作數的重載。
5.重載賦值運算符“=”
賦值運算符也必須作為成員函數重載。一般情況下并不需要重載“=”,但若類中包含指針指向動態空間的指針時,就需要重載賦值運算符。重載賦值運算符“=”時應注意的幾點如下:
(1)返回值應聲明為引用,但函數體中總是用return*this;語句返回。
(2)若參數被聲明為指針或引用,一般應加上eonst修飾。
(3)若一個類需要重載運算符=,一般也就需要定義自己特有的拷貝構造函數,反之亦然。
6.重載復合賦值運算符“+=”
重載復合賦值運算符“+=”、“-=”、“*=”的方法與重載賦值運算符的方法差不多,不同的是復合賦值運算符既可重載為成員函數又可重載為非成員函數。當重載為友元函數時,兩個操作數都必須出現在參數表中,而且第1個參數應聲明為引用。
7.重載關系操作符“>”
在C++中的關系操作符有<、>、= =等,重載的這些關系運算符函數應返回邏輯值。例如,將關系運算符>重載為類A的成員函數的聲明形式是:
bool operator>(A a){return num*a. den>a. num*den;}
8.重載下標訪問運算符“[]”
重載下標訪問運算符“[]”,可以實現數組下標越界檢測等。下標訪問運算符“[]”只能作為成員函數重載。例如,一般下標訪問運算符“[]”重載函數的定義形式為:
返回類型類名::operator[](下標類型形參){//函數體}
小提示:
一個重載的運算符函數不能帶有默認的參數。
9.重載C++流運算符“>>”和“<<”
在C++中,C++流輸入運算符“>>”和輸出運算符“<<”只能重載為非類成員函數,一般重載為友元函數。重載C++流輸入運算符“>>”和輸出運算符“<<”的格式為:
istream& operator>>( istream&,<類名>&);
ostream& operator<<(ostream&,<類名>);
文章來源于領測軟件測試網 http://www.kjueaiud.com/