運算子過載

2021-08-15 20:25:51 字數 1474 閱讀 6610

//在類a中過載 !

//其中,ret為bool ret;成員變數

bool operator!()

//a a(true); if(a)

//執行後為true.

//在類a中過載 資料型別b

//其中,ret為bool ret;成員變數

operator b()//不帶返回值

//a a(true);b b = a;

//如果不過載資料型別,直接賦值,由於沒有相關規則,便會報錯.

//注意:這裡的資料型別可以是任何可例項化的資料型別,包括基本資料型別和復合資料型別.

過載運算子就是對運算子重新定義規則,如何改變規則只能在函式體中實現.因此不能改變運算子的優先順序.

過載關鍵字 new delete也可以過載.

允許過載的運算子:

單目運算子 成員函式

= () -> 成員函式

+= -= *= /= %= *= ^= &= != <<= >>= 成員函式

其他雙目運算子 + - * / %等 友元函式(加友元是為了訪問private和protect成員,因此不需要也可以選擇不加.)

不允許過載的運算子:

.             成員訪問運算子

.* 成員指標訪問運算子

:: 作用域運算子

sizeof 長度運算子

typeid 類似sizeof

?: 條件運算子

a operatorb()表示類內對b運算子進行過載,

a operator++(int)表示類內過載的是後置++.

c operator+(a a,b b)表示a型別+b型別時的過載.

1,當沒有引數時,在類中表示運算子在第一位,類的物件在第二位.

2,當有乙個非佔位引數時,那麼這個函式往往在類外,那麼效果同1.

3,當有兩個引數時,那麼這個函式往往在類外,第乙個引數必須在運算子左側,第二個引數必須在運算子右側.

如int operator(a &a,b &b),那麼a a;b b;int c;c = a+b正確,c = b+a錯誤.

過載new與delete時格式是固定的:

void *operator new(size_t size)

void operator delete(void *p)

用於區域性過載時區域性過載了new delete

用於全域性過載時,原有new delete被遮蔽掉了,所有型別new delete均遵循新規則.因為new delete配對.new delete malloc free對於基本資料型別都一樣,但對於物件則完全不同.物件嚴格遵循new delete new delete規則.

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

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

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

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

運算子過載

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