運算子過載
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 加法...