操作符過載下

2021-06-21 09:35:07 字數 1863 閱讀 3449

operator關鍵字能將操作符定義為全域性函式,本質即函式過載,類的成員函式是否可作為操作符過載的函式?

class complex

complex operator+ (const complex& c2);

};complex complex::operator+ (const complex& c2) //隱式第乙個引數為this指標,指向c1

int main(int argc, char *argv)

成員函式過載操作符比全域性函式過載操作符少乙個引數,即左運算元,不需friend關鍵字什麼時候使用全域性函式過載操作符?什麼時候使用成員函式過載操作符?

當無法修改左運算元的類時,只能使用全域性函式進行過載,如要將《使用成員函式方式過載,則需將ostream& operator<< (ostream& out, const complex& c)對應的成員函式新增至ostream類,但ostream為c++標準庫定義的類無法修改

=, , ()和->操作符只能通過成員函式過載(賦值操作符、陣列操作符、函式呼叫操作符)

編譯器為每個類預設提供=,但其為簡單成員變數值複製,若a1=a2,則導致指標mspace內容同,析構函式中釋放兩次同一記憶體

編譯器為每個類提供預設賦值操作符,其僅為簡單值複製,類中存在指標成員變數時就需過載賦值操作符

++操作符只有乙個運算元,其有字首字尾區分,如何過載才能區分前置運算和後置運算?

通過乙個佔位引數來區分前置運算和後置運算

class complex

complex operator++ (int);

complex& operator++ ();

};complex complex::operator++ (int) //obj++效率低

complex& complex::operator++ () //++obj

int main(int argc, char *argv)

&&和||操作符技術上可過載,但最好別過載

class test

test operator+ (const test& obj)

};int main(int argc, char *argv)

{ test t1 = 0;

test t2 = 1;

if( t1 && (t1 + t2) ) //等價t1.operator&&(t1.operator+(t2)),故先列印...

{cout<

&&和||是c++中非常特殊的操作符,其內建實現了短路規則,操作符過載是靠函式過載來完成的,運算元作為函式引數傳遞,故引數都會被求值,無法實現短路規則

操作符過載(下)

什麼時候使用全域性函式過載操作符?什麼時候使用成員函式過載操作符?陣列類 最終完整 c 編譯器會為每個類提供預設的賦值操作符 操作符過載 不要過載 和 為什麼?小結通過operator關鍵字能夠將操作符定義為全域性函式 操作符過載的本質就是函式過載 類的成員函式是否可以作為操作符過載的函式?a 當然...

操作符過載

ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...

操作符過載

1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...