c 操作符過載 學習筆記

2021-09-01 07:47:10 字數 1203 閱讀 7775

1.過載的限制:

1)過載後的操作符必須至少有乙個運算元是使用者自定義的型別,這可以防止使用者把標準操作符給過載。

比如 t operator-(double a,double b)//error

2)不能違反原來操作符的句法規則。

3)不能定義新的操作符,否則那就不叫過載了。

4)不能過載下面的操作符;

sizeof

typeid

const_cast

dynamic_cast

reinterpret_cast

static_cast

除上面的操作符外,其他的都可以被過載。

5)呼叫過載函式時,左側的運算元是呼叫物件,比如:

a = b*2.75 將會被編譯器轉化為下面過載函式的呼叫

a = b.operator * (2.75)

2.過載操作符與友元

為什麼需要友元?在類過載二元操作符時常需要友元。比如還是上面a=b*2.75的例子,乘法交換兩個運算元是非常正常的,即b*2.75與2.75*b應該是等價的,而按照過載操作符的規則,左側的運算元是呼叫物件,但2.75顯然不是,因此當你寫2.75*b時,編譯器就不知道怎麼辦了。解決辦法是你可以定義下面的非成員函式:

t operator* (double a,t b)

其實現可能是:

t c;

c.t = a*b.t;

return c;

但這樣還不行,因為a無法訪問t的私有成員,即a* b.t 是非法的。這時候就需要用到友元了。

friend t operator * (double a,t b);

關於友元函式需要記住兩點:

1.雖然友元函式在類宣告中宣告,但是它不是成員函式,因此不能使用成員操作符來呼叫。

2.友元函式雖然不是成員函式,但是與成員函式的訪問許可權相同。

如果要為類過載操作符,並將非類的項作為第乙個運算元,則可以使用友元函式來反轉運算元的順序。

最常見的友元函式:過載《操作符

我們早已經習慣了這樣的輸出語句:

int i=2;

cout << "i="friend ostream& operator<<(ostream& os,const t& t);

ostream& operator<<(ostream& os,const t& t)

c 學習筆記 9 操作符過載

1.c 標準庫 a.c 標準庫並不是c 語言的一部分,c 標準庫是由c 語言編寫而成的類庫和函式的集合。c 標準庫中定義的類和物件都位於std命名空間中,c 標準庫的標頭檔案都不帶.h字尾,並且c 標準庫涵蓋了c庫的功能,如c庫中對應c 庫中的b.c 標準庫預定義了多數常用的資料結構,如 c.c 標...

操作符過載 C C 學習筆記

一 什麼是操作符過載?考慮到類成員操作符過載可以訪問類中的私有變數,但是非類成員過載操作符卻不能很方便的訪問類的私有成員,為了方便起見,我們可以通過使用友元 friend 的方式,方便的訪問類的私有成員。舉例 class string 注意 friend宣告緊跟在類名之後,而不是放在public p...

C 筆記,過載new , delete 操作符

1.簡述 1 自定義過載全域性的new 和 delete,在使用new新增物件和delete物件時,會呼叫自定義全域性的new和delete操作,c 內部類也 如char,int等 不例外,同樣會呼叫自定義的new和delete。2 也可以定義作用域為當前類的new和delete,即像在類中過載其他...