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...