一.運算子過載---為運算子提供不同的語義
struct complex
; complex c1=;
complex c2=;
如果想對c1,c2直接相加c1+c2,c語言中直接的方法就是用函式實現。
c++中用運算子過載來實現c1+c2;
c++中運算子過載的本質:
*:c++中通過operator關鍵字擴充套件操作符
*: operator的本質是通過函式過載實現操作的
complex operator+ (const complex& c1,const complex& c2)
; ret.a =c1.a+c2.a;
ret.b =c1.b+c2.b;
return ret;
}
operator+ (c1,c2) <==> c1+c2
二.c++中的友元
*:private 宣告使得類的成員不能被外界訪問
*:通過 friend 關鍵字可以獲得類外訪問類的許可權
(1)《過載左移操作符
ostream operator<<(ostream& out,const complex& c)
三. 用成員函式過載和用全域性函式過載比較
使用成員函式過載:
*:相比使用全域性函式過載操作符(friend),少乙個引數,
*:不需要使用friend關鍵字
如何選擇使用全域性函式過載和成員函式過載操作符
*:當無法修改作引數的類時,使用全域性函式進行過載
如:friend ostream operator<<(ostream out,const complex& c);
*;=,,-> 操作符只能通過成員函式進行過載。
(3) 的過載
int& array::operator(int i)
(4)= 的過載
array& array::operator= (const array& obj)
(5)== 的過載
bool array::operator==(const array& obj)
注意:(1) c++編譯器會為每個類提供預設的賦值操作符
(2)預設的賦值操作符只是簡單的值複製
(3)當類中存在指標成員變數時(如字串類)時,就需要過載賦值操作符
四.++操作符的過載
(1)++操作符只有乙個引數
(2)++ 操作符有字首和字尾之分
解決方案:
c++中通過乙個佔位引數來區分字首操作符和字尾操作符的過載
(1) obj++ 的過載
complex operator++(int ) // obj++
(2)++obj 的過載
complex operator++() // ++obj
小結:(1) 操作符過載的本質是函式過載,擴充套件操作符的語義
(2)friend 關鍵字可以使全域性函式訪問類,開發類的訪問許可權
(3)=,,-> 操作符只能通過成員函式進行過載
(4) ++ 操作符通過乙個int 引數進行區分字首與字尾的過載
9 過載操作符
include includeusing namespace std class num void print 也可以在內部提供乙個 號操作符過載,但和全域性 號過載如果呼叫方法一致,就只能存在乙個 num operator num other 過載 是修改自身,不能返回新物件,所以要返回自身引用 ...
操作符過載
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...