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,即像在類中過載其他...