天天看點

c++ 運算符重載、資料類型轉換

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

}

作用:将自定義資料類型轉換為标準資料類型。

繼續閱讀