過載運算子初學總結
一:過載運算子:
1:過載運算子函式可以對運算子作出新的解釋,但原有基本語義不變:
①:不改變運算子的優先順序
②:不改變運算子的結合性
③:不改變運算子所需要的運算元
④:不能建立新的運算子
2:運算子函式可以過載為成員函式或友元函式。
3:成員運算子函式的原型在類的內部宣告格式如下:
class X {
//…
返回型別 operator運算子(形參表);
//…
}
在類外定義成員運算子函式的格式如下:
返回型別 X::operator運算子(形參表)
{
函式體
}
4: 一般而言,採用成員函式過載單目運算子時,以下兩種方法是等價的:
@aa; // 隱式呼叫
[email protected](); // 顯式呼叫
成員運算子函式
5:①:在第一個引數需要隱式轉換的情形下,使用友元函式過載。
②:友元函式沒有 this 指標,所需運算元都必須在引數表顯式。
③:C++中不能用友元函式過載的運算子有
= () [] ->
6:①:成員運算子函式比友元運算子函式少帶一個引數(後置的++、--需要增加一個形參)。
②:雙目運算子一般可以被過載為友元運算子函式或成員運算子函式,
7:①:賦值運算子過載用於物件資料的複製
②: operator= 必須過載為成員函式
③:過載函式原型為:
類名 & 類名 :: operator= ( 類名 ) ;
8:[] 和 () 只能用成員函式過載,不能用友元函式過載。
9:定義輸出運算子“<<”過載函式的一般格式如下:
ostream& operator<<(ostream& out,class_name& obj)
{
out<<obj.item1;
out<<obj.item2;
.. .
out<<obj.itemn;
return out;
}
10 :定義輸入運算子函式 “>>”過載函式的一般格式如下:
istream& operator>>(istream& in,class_name& obj)
{
in>>obj.item1;
in>>obj.item2;
. . .
in>>obj.itemn;
return in;
}
二:典型程式碼:
#include<iostream>
using namespace std;
class Increase
{ public :
Increase ( ) { value=0; }
void display( ) const { cout<<value<<'\n'; } ;
friend Increase operator ++ ( Increase & ) ; // 前置
friend Increase operator ++ ( Increase &, int ) ; // 後置
private: unsigned value ;
};
Increase operator ++ ( Increase & a )
{ a.value ++ ; return a ; }
Increase operator ++ ( Increase & a, int )
{ Increase temp(a); a.value ++ ; return temp; }
int main( )
{ Increase a , b , n ; int i ;
for ( i = 0 ; i < 10 ; i ++ ) a = n ++ ;
cout <<"n= " ; n.display( ) ; cout <<"a= " ; a.display( ) ;
for ( i = 0 ; i < 10 ; i ++ ) b = ++ n ;
cout << "n= " ; n.display( ) ; cout << "b= " ; b.display( ) ;
}
三:學習心得:
過載運算子和過載函式相似,遵循函式過載的基本原則。
過載之後的運算子不能改變運算子的優先順序和結合性,也不能改變運算子運算元的個數及語法結構。
運算子過載不能改變該運算子用於內部型別物件的含義。它只能和使用者自定義型別的物件一起使用,或者用於使用者自定義型別的物件和內部型別的物件混合使用時。總之通過學習運算子過載能更好的運用函式,使程式碼更精煉。