運算子過載

2021-10-21 05:53:30 字數 2097 閱讀 9738

運算子過載:對已有的運算子重新進行定義,賦予另一種功能,以適應不同的資料型別

加號運算子過載:實現兩個自定義資料型別相加的運算

可以通過成員函式過載+號

關鍵字 operator+

person operator+ (person &p);

完成函式後

person p1;

person p2;

不必寫p1.operator+(p2);

只需要 p1+p2;

也可以通過全域性函式過載+號

使用的時候也只需要p1+p2

運算子過載也可以發生函式過載

即給+賦予更多的對於不同引數的功能

內建的資料型別表示式運算子不能改變; 不要濫用運算子過載

左移運算子過載:可以輸出自定義資料型別

person p;

cout不會利用成員函式過載《運算子,因為無法實現cout在左側,本質是cout operator用全域性函式過載左移運算子

ostream cout標準輸出流物件,這個物件全域性只能有乙個,不能拷貝,所以需要用引用的方式

void operator<

cout上述**只能呼叫cout

cout

可以呼叫cout過載左移運算子配合友元可以實現輸出自定義型別

遞增運算子過載:通過過載遞增運算子,實現自己的整型資料

成員函式,類中定義了私有成員變數a;

前置person& operator++()返回引用是為了一直對乙個資料進行遞增

a++;

return *this;

先做++運算,再做自身返回

後置person operator++(int)//int為佔位引數,用於區分前置和後置遞增

不能返回引用因為此時返回的是區域性變數

先記錄在遞增

person temp=*this;

a++;

return temp;

前置遞增返回引用,後置遞增返回值

賦值運算子過載

c++編譯器至少給乙個類新增四個函式

1預設建構函式

2預設析構函式,均無參函式體為空

3預設拷貝建構函式,對屬性進行值拷貝

4賦值運算子 operator=,對屬性進行值拷貝

如果類中有屬性指向堆區,做賦值操作時也會出現深淺拷貝問題

如果不寫特別的賦值,存在堆區資料時,普通賦值會進行淺拷貝,析構堆區就會造成重複釋放

成員函式完成過載:

person& operator=(person &p)

{此時的a為指標,指向一塊堆區資料int *a=new int (10);

編譯器提供的如:a=p.a;

要寫的為:

先判斷是否有屬性在堆區,如果有先釋放乾淨,然後再進行深拷貝

if(a!=null)

delete a;

a=null;

a=new int(*p.a);深拷貝

return *this;保證返回值,完成鏈式操作

為了滿足鏈式操作,需要進行更改

關係運算子過載

過載關係運算子,可以讓兩個自定義型別物件進行對比操作

成員函式過載

bool operator==(person &p)

if(this->name==p.name&&this->age==p.age)return ture;

return false;

函式呼叫運算子()也可以過載

由於過載後使用的方式非常像函式的呼叫,因此成為仿函式

仿函式沒有固定寫法,非常靈活

成員函式實現

void operator()(string test)

cout << test 使用的時候

void test()

person p;

p("hello world");將會輸出hello world  仿函式

呼叫正常函式,test2(「hello world」);非常相似

匿名函式物件,完成後立即被釋放,空的小括號就代表他

person()(「hello world」);

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

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

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

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

運算子過載

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