運算子過載

2021-10-04 03:45:12 字數 2394 閱讀 9964

1 – 概念

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

運算子過載(operator overloading)只是一種」語法上的方便」,也就是它只是另一種函式呼叫的方式。

在c++中,可以定義乙個處理類的新運算子。這種定義很像乙個普通的函式定義,只是函式的名字由關鍵字operator及其緊跟的運算子組成。差別僅此而已。它像任何其他函式一樣也是乙個函式,當編譯器遇到適當的模式時,就會呼叫這個函式

例如:乙個類中有int型別和string型別的成員變數,原本+運算子只能實現兩個陣列之間相加,但是現在可以通過運算子過載實現兩個物件相加,然後自己去實現物件內成員變數的運算方法,這樣做方便去實現物件之間的運算

2 – 可過載的運算子

幾乎c中所有的運算子都可以過載,但運算子過載的使用時相當受限制的。特別是不能使用c中,當前沒有意義的運算子(例如用**求冪)不能改變運算子優先順序,不能改變運算子的引數個數。這樣的限制有意義,否則,所有這些行為產生的運算子只會混淆而不是澄清寓語意。

3 – 全域性函式實現運算子過載(只能對公有的成員變數的物件進行操作)

#include

#include

using

namespace std;

class

chongzai

chongzai

(string subject,

int month,

int num,

int study_money)

//private:(私有成員變數對應的物件實現運算子過載)

string subject;

int month;

int num;

int study_money;};

#if 0

//運算子過載函式

intoperator

+(qf &ob1, qf &ob2)

#endif

#if 0

chongzai operator

+(qf &ob1, qf &ob2)

#endif

void

operator

+(qf &ob1, qf &ob2)

void

test()

4 – 私有成員變數對應的物件實現運算子過載

(1)方法1:將運算子過載函式設定為友元函式實現對私有成員的操作

void

operator

+(chongzai &ob1,chongzai &ob2)

void

test2_1()

(2)方法2:使用成員函式實現運算子過載

#include

#include

using

namespace std;

class

chongzai

#endif

intoperator+(

const chongzai &ob)

private

: string subject;

int month;

int num;

int study_money;};

#if 0

void

test3()

#endif

void

test4()

5 – 當成員變數涉及指標時所需要考慮的運算子過載

#include

#include

#include

using

namespace std;

class

person

person

(int id,

char

*name,

char ***)

~person()

}person

(const person &ob)

void

getmsg()

//運算子過載函式

void

operator

=(person &ob)

this

->name =

newchar

[strlen

(ob.name)+1

];strcpy

(this

->name, ob.name)

;this

->*** = ob.***;

}private

:int id;

char

*name;

char ***;};

void

test1()

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

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

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

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

運算子過載

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