C 運算子過載 函式模板

2021-09-25 09:35:38 字數 1985 閱讀 5719

運算子過載

class test}; 

步驟一:定義全域性函式

test add

(test &t1, test &t2)

步驟二:對函式名進行改造

test operator+

(test &t1, test &t2)

intmain()

運算子過載的本質是函式呼叫

不改變運算子的優先順序,不改變運算子的結合性,不改變運算子的運算元個數,不能建立新的運算子

運算子過載的兩種方法

1用成員函式或友元函式過載

運算子函式可以過載為友元函式和成員函式。

關鍵區別在於成員函式由this指標,友元函式沒有

2用全域性函式實現

對二元運算子進行過載

class test

public:

成員函式實現-過載

test operator-

(test &t)

友元函式實現*過載

friend test operator*

(test &t1, test &t2);}

; 全域性函式實現+過載

test operator+

(test &t1, test &t2)

友元函式實現*過載

test operator*

(test &t1, test &t2)

intmain()

友元函式對二元運算元過載時, 可以交換兩個運算元的位置。

成員函式則不可以, 因為成員函式是相對於某乙個物件來說的。

對一元運算子進行過載

class test 

成員函式實現過載前置--

test& operator--()

成員函式實現過載後置--

test& operator--

(int)

private:

int a;

int b;

友元函式實現過載前置++

friend test& operator++

(test &t)

; 友元函式實現過載後置++

friend test& operator++

(test &t,

int);}

; test& operator++

(test &t)

注意返回的不是引用

test operator++

(test &t,

int)

intmain()

過載=操作符

1 釋放舊的記憶體

2 返回乙個引用

3 根據大小分配記憶體

4 賦值

class test

test& operator=

(test &obj)

this->len=obj.len;

this->p=new char

[len+1]

;strcpy

(p, obj.p)

;return

*this;}~

test()

}private:

int len;

char

*p;}

;int

main()

函式模板

#include

using namespace std;

template

t get_max

(t a, t b)

intmain()

類模板和函式模板一樣,在類的前面新增template

在類的內部把資料型別該換成t, 使用時用class name即可

C 運算子過載函式之成員運算子過載函式

5.2.3 成員運算子過載函式 在c 中可以把運算子過載函式定義為某個類的成員函式,稱之為成員運算子過載函式。1.定義成員運算子過載函式的語法形式 1 在類的內部,定義成員運算子過載函式的格式如下 函式型別 operator 運算子 形參表 2 成員運算子過載函式也可以在類中宣告成員函式的原型,在類...

C 運算子過載函式

在c 中不可過載的運算子有 sizeof 可過載的運算子有 new delete 其中注意一下 c 中new和delete與c語言中malloc和free不一樣。c語言中malloc和free市庫函式 在c 中new和delete是運算子 在使用new時相當於預設使用建構函式 malloc,在使用d...

C 運算子過載函式

5.運算子過載 5.1 在類外定義的運算子過載函式 c 為運算子過載提供了一種方法,即在執行運算子過載時,必須定義乙個運算子過載函式,其名字為operator,後隨乙個要過載的運算子。例如,要過載 號,應該寫乙個名字為operator 的函式,其他的運算子也是如此。函式 功能 operator 加法...