9 操作符過載

2021-06-26 02:27:42 字數 2959 閱讀 9947

一.運算子過載---為運算子提供不同的語義

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