1.運算符就是“+”、“>>”等符号,對運算符重載實質就是對函數的重載,這樣運算符就能在原有基礎上增加新功能,不能自己定義新運算符,隻能對已有運算符重載,重載運算符後不能改變運算符本身的特性,比如優先級,運算數個數等;
2.運算符重載格式:
函數類型 operator 運算符名稱(形參表)
{
//具體操作
}
e.g.complex operator +(complex &c1,complex &c2)
operator是關鍵字,函數名由operator和運算符共同組成,如”operator +”。
3.不能重載的5個運算符:“.”、“*”、“::”、“sizeof”、“?:”。
4.對運算符重載的函數有兩種方式:類成員函數、類友元函數。
類成員函數:complex operator +(complex &c1)
這樣就可以直接c1+c2了,相當于是c1.operator+(c2),operator+就是c1的成員函數,因為可以通過this指針通路類的資料成員,是以可以少寫一個函數參數,第一個參數必須為本類對象。
類友元函數:complex operator +(complex &c1,complex &c2)
這樣c1+c2相當于是operator+(c1,c2)
如果不用友元,則重載的運算符函數無權通路類的私有成員,是以要用友元。
因為友元會破壞類的封裝,是以盡量将運算符函數作為類的成員。一般來說,雙目運算符為友元,單目和複合運算符為成員函數。
5.資料類型顯式轉換:
c風格:(int)12.3=12
c++風格:int(12.3)=12
6.構造函數轉換資料類型,重載構造函數即可。
7.類型轉換函數:
格式:operator 傳回類型()//一般是在類内部寫的,
{
//實作轉換的語句
}
e.g.
class A
{
public:
int a;
A(int x) :a(x) {}
operator int()
{
return a;
}
};
int main()
{
A haha(2);
int b = haha + 3;
A c = haha + 4;
cout<<b<<"\n"<<c.a<<endl;
return 0;
//結果輸出5和6
}
作用:将自定義資料類型轉換為标準資料類型。