運算子過載(C 學習記錄)

2021-10-10 14:03:51 字數 3218 閱讀 8793

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

4.5.1 加號運算子過載

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

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()

執行結果:

總結1:對於內建的資料型別的表示式的的運算子是不可能改變的

總結2:不要濫用運算子過載

4.5.2 左移運算子過載

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

class

person

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

//void operator<

private

:int m_a;

int m_b;};

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

//ostream物件只能有乙個

ostream&

operator

<<

(ostream& out, person& p)

void

test()

intmain()

執行結果:

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

4.5.3 遞增運算子過載

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

class

myinteger

//前置++

myinteger&

operator++(

)//後置++

myinteger operator++(

int)

private

:int m_num;};

ostream&

operator

<<

(ostream& out, myinteger myint)

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

void

test01()

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

void

test02()

intmain()

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

4.5.4 賦值運算子過載

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()

執行結果:

4.5.5 關係運算子過載

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

示例:

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()

執行結果:

4.5.6 函式呼叫運算子過載

示例:

class

myprint};

void

test01()

class

myadd};

void

test02()

intmain()

執行結果:

C 學習 運算子過載

同函式過載一樣,算數操作符過載能夠帶給我們操作不同資料型別的方法,包括你自己定義的類。我們日常最常用的就是加 減 乘 除,而它們的性質又有些相似。所以,它們的運算子實現方式也有些相似。共有三種實現方式 首先,我們介紹怎樣使用友鄰函式定義操作符過載。看下面的 include class cents 使...

c 學習運算子過載

運算子過載 1 實驗目的 學習掌握重定義與類有關的運算子。把握過載運算子的時機。學習掌握把乙個類物件轉換為另乙個類物件。學習掌握過載為成員與友元的區別及其帶引數的情況。學習掌握值返回與引用返回的區別及應用時機。2 實驗內容 1 生成乙個表示複數的類fs。複數的實部sb和虛部xb作為其資料成員。提供成...

C 學習 運算子過載

運算子過載的本質 過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。大多數的過載運算子可被定義為普通的非成員函式或者被定義為類成員函式。非成員函式 需要為每次操作傳遞兩個引數 box oper...