運算子過載

2021-10-25 12:36:32 字數 2760 閱讀 2400

作用:實現兩個自定義資料型別相加的運算

class

person

;person

(int a,

int b)

//成員函式實現 + 號運算子過載

person operator+(

const person& p)

public

:int m_a;

int m_b;};

//全域性函式實現 + 號運算子過載

//person operator+(const person& p1, const person& p2)

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

person operator+(

const person& p2,

int val)

void

test()

intmain()

作用:可以輸出自定義資料型別

class

person

//成員函式 p.operator<<(p) 實現不了 p << cout 不是我們想要的效果

//void operator<<(person& p)

<<(cout) 簡化為 p//因此不會成員函式來過載《運算子 因為實現不了cout在左邊

private

:int m_a;

int m_b;};

//全域性函式實現左移過載

//ostream物件只能有乙個 所以用引用

ostream&

operator

<<

(ostream& out, person& p)

void

test()

intmain()

(檢視cout資料型別:右鍵轉到定義 )

總結:過載左移運算子配合友元可以實現輸出自定義資料型別

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

class

myinteger

//前置++ 返回引用可以實現鏈式操作(一直對乙個資料進行操作)

myinteger&

operator++(

)//後置++

//int 代表佔位引數 不能寫double float

//不能返回引用,因為返回的temp為區域性物件,函式執行完畢後即被銷毀,後面的操作即為非法操作

myinteger operator++(

int)

private

:int m_num;};

//左移運算子過載

ostream&

operator

<<

(ostream& out, myinteger myint)

//注意這裡的myint也不能用引用

//前置++ 先++ 再返回

void

test01()

//後置++ 先返回 再++

void

test02()

intmain()

總結: 前置遞增返回引用,後置遞增返回值

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

預設建構函式(無參,函式體為空)

預設析構函式(無參,函式體為空)

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

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

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

示例:

class

person

//過載賦值運算子

person&

operator

=(person &p)

//編譯器提供的**是淺拷貝

//m_age = p.m_age;

//提供深拷貝 解決淺拷貝的問題

m_age =

newint

(*p.m_age)

;//返回自身

return

*this;}

~person()

}//年齡的指標

int*m_age;};

void

test01()

intmain()

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

示例:

class

person

;bool

operator

==(person & p)

else

}bool

operator

!=(person & p)

else

} string m_name;

int m_age;};

void

test01()

else

if(a != b)

else

}int

main()

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

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

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

示例:

class

myprint};

void

test01()

class

myadd};

void

test02()

intmain()

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

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

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

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

運算子過載

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