運算子過載

2022-03-28 06:37:37 字數 2049 閱讀 6506

部分**自

您可以重定義或過載大部分 c++ 內建的運算子。這樣,您就能使用自定義型別的運算子。

過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。

boxoperator+(constbox&);

宣告加法運算子用於把兩個 box 物件相加,返回最終的 box 物件。大多數的過載運算子可被定義為普通的非成員函式或者被定義為類成員函式。如果我們定義上面的函式為類的非成員函式,那麼我們需要為每次操作傳遞兩個引數,如下所示:

boxoperator+(constbox&,constbox&);

下面的例項使用成員函式演示了運算子過載的概念。在這裡,物件作為引數進行傳遞,物件的屬性使用this運算子進行訪問,如下所示:

#include using namespace std;

class box

void setlength( double len )

void setbreadth( double bre )

void setheight( double hei )

// 過載 + 運算子,用於把兩個 box 物件相加

box operator+(const box& b)

private:

double length; // 長度

double breadth; // 寬度

double height; // 高度

};// 程式的主函式

int main( )

distance(

int f, int

i) friend ostream &operator

<<( ostream &output,

const distance &d )

friend istream &operator>>( istream &input, distance &d )

};int

main()

執行結果:

$./a.outenterthe value of object:7010firstdistance:f :11i :10seconddistance:f :5i :11thirddistance:f :70i :10

習慣上人們是使用 cin>> 和 cout<< 的,得使用友元函式來過載運算子,如果使用成員函式來過載會出現 d1<

下面這個例項展示了如果運用成員函式來過載會出現的情況d1<

#include using namespace std;

class distance

distance(int f, int i)

ostream& operator<<( ostream & os)

{os<<"英吋:"《關鍵字operator

以下**自

運算子過載本質是函式的呼叫

1. 過載操作符必須具有乙個類型別或列舉型別運算元。這條規則強制過載操作符不能重新定義用於內建型別物件的操作符的含義。

如:int operator+(int, int), 不可以   

2. 為類設計過載操作符的時候,必須選擇是將操作符設定為類成員還是普通非成員函式。在某些情況下,程式沒有選擇,操作符必須是成員;在另外一些情況下,有些經驗可以指導我們做出決定。下面是一些指導:

a. 賦值(=),下標(),呼叫(())和成員訪問箭頭(->)等操作符必須定義為成員,將這些操作符定義為非成員函式將在編譯時標記為錯誤。

b. 像賦值一樣,復合賦值操作符通常應定義為類的成員。與賦值不同的是,不一定非得這樣做,如果定義為非成員復合賦值操作符,不會出現編譯錯誤。

c. 改變物件狀態或與給定型別緊密聯絡的其他一些操作符,如自增,自減和解引用,通常應定義為類成員。

d 對稱的操作符,如算術操作符,相等操作符,關係操作符和位操作符,最好定義為普通非成員函式。

e io操作符必須定義為非成員函式,過載為類的友元。

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

運算子過載

c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...