運算子過載

2021-10-03 06:29:22 字數 3037 閱讀 8179

一 概念

1為什麼會用運算子過載機制

用複數類舉例/

/complex c3 =c1 + c2;

//原因 complex是使用者自定義型別,編譯器根本不知道如何進行加減

//編譯器給提供了一種機制,讓使用者自己去完成,自定義型別的加減操作。。。。。

//這個機制就是運算子過載機制

2 運算子過載的本質是乙個函式全域性函式、類成員函式方法實現運算子過載步驟

1)要承認操作符過載是乙個函式,寫出函式名稱operator+ () 

2)根據運算元,寫出函式引數

3)根據業務,完善函式返回值(看函式是返回引用 還是指標 元素),及實現函式業務

void

main()

//4 把complex類變成私有屬性

//友元函式的應用場景

//friend complex operator+(complex &c1, complex &c2);

cout<<

"hello..."

<

system

("pause");

return

;}

二 運算子過載的限制

三 運算子過載程式設計基礎

例如://全域性函式(友元函式) 完成 +操作符 過載

complex operator+(complex &c1, complex&c2)
//類成員函式 完成 -操作符 過載

complex operator-(complex &c2)
1. 運算子過載的兩種方法

2. 二元運算子過載

例如1:

//通過類成員函式完成-操作符過載

//函式宣告 complex operator-(complex &c2)

//函式呼叫分析

//用類成員函式實現-運算子過載

complex c4 = c1 - c2;

c4.printcom();

例如2:

//通過全域性函式方法完成+操作符過載

//函式宣告 complex operator+(complex&c1, complex &c2)

//函式呼叫分析

int main()

//呼叫方法

++c1 ; //需要寫出操作符過載函式原形

c1.printcom();

//運算子過載函式名定義//首先承認操作符過載是乙個函式

定義函式名operator++

//分析函式引數

根據左右運算元的個數,operator++(complex &c1)

//分析函式返回值complex& operator++(complex &c1) 返回它自身

例如4前置—操作符 成員函式實現

complex& operator--()

呼叫方法

c1 ++ ; //先使用 後++
後置++運算子過載函式名定義

complex operator++(complex &c1, int) //函式佔位引數和 前置++ 相區別
例如6

後置— 操作符

用類成員函式實現

complex operator--(int) 

呼叫方法

c1 ++ ; //先使用 後++
後置–運算子過載函式名定義

complex operator--(int) //函式佔位引數 和 前置-- 相區別
4. 友元函式實現操作符過載的應用場景1)友元函式和成員函式選擇方法

ø  當無法修改左運算元的類時,使用全域性函式進行過載

ø =, , ()和->操作符只能通過成員函式進行過載

2)用友元函式 過載 << >>操作符

ø  istream 和 ostream 是 c++ 的預定義流類 

ø cin 是 istream 的物件,cout 是 ostream 的物件

ø 運算子 << 由ostream 過載為插入操作,用於輸出基本型別資料

ø 運算子 >> 由 istream 過載為提取操作,用於輸入基本型別資料

ø 用友員函式過載 << 和 >> ,輸出和輸入使用者自定義的資料型別

a)用全域性函式方法實現 << 操作符

ostream& operator<

//2 根據obj1分配記憶體大小

this->m_len= obj1.m_len;

this->m_p= new char [m_len+1];

//3把obj1賦值給obj3

strcpy(m_p,obj1.m_p);

return *this;

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

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

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

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

運算子過載

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