友元和運算子過載

2021-10-07 01:53:56 字數 1949 閱讀 4397

友元分為友元函式和友元類兩種

1.友元函式。乙個類的友元函式可以訪問該類的私有成員

2.友元類。若a是b的友元類,則a的成員函式可以訪問b的私有成員

運算子過載:就是對已有的運算子(c++中預定義的運算子)賦予多重的含義,使同一運算子作用於不同型別的資料時導致不同型別的行為

目的:擴充套件c++中提供的運算子的適用範圍,使之能作用於物件

需求:例如,complex_a和complex_b是兩者複數物件,求兩個複數的和,我們希望直接寫成,complex_a+complex_b;但是在數學上我們可以直接對兩個複數進行+ -運算,但是在c++中,直接將±作用複數物件上是不允許的

運算子過載的實質是函式過載,可以過載為普通函式,也可以過載為成員函式,把含運算子的表示式轉換成對運算子函式的額呼叫,把運算子的運算元轉換成運算子函式的引數。運算子被多次過載時,根據實參的型別決定呼叫那個運算子函式。

運算子過載的形式是:

返回值型別 operator 運算子 (形參表)

過載為成員函式時,引數個數為運算子目數減一。過載為普通函式時,引數個數為運算子目數
class complex

//賦值列表

complex operator-

(const complex &c);}

;complex operator +

(const complex &a,

const complex &b)

complex complex:

:operator-

(const complex&a)

intmain()

輸出
583

3

賦值運算子的過載

需求:有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別的變數賦值給complex物件或者把乙個char *型別的字串賦值給乙個字串物件,此時有需要過載賦值運算子。注意,賦值運算子函式只能過載為成員函式

class string

const

char

*c_str()

string &operator=

(const

char

*s);

~string()

};string & string:

:operator=

(const

char

*s)int

main()

beauty

japanese

運算子過載為友元函式

一般情況下,將運算子過載為類的成員函式是較好的選擇,但有時,過載類的成員函式時不能滿足需求,過載為普通函式時,又不能訪問類的私有成員,所以需要將運算子過載為友元,比如這樣

class complex

complex operator+

(double r);}

;complex complex:

:operator+

(double r)

intmain()

為了解決上面的問題 就需要將+過載為普通函式,然後在類裡面宣告一下啊
complex operator +

(double r,

const complex &c )

但是普通函式又不能訪問私有成員,所以需要將+運算子過載為友元,如下
class complex

complex operator+

(double r)

; friend complex operator +

(double r,

const complex &c );}

;

友元運算子過載

運算子就是一種特殊的函式 運算子過載可以是普通函式 const money operator const money a1,const money a2 可以是成員函式 const money operator const money a2 const 當二元運算子作為成員函式進行過載時,只有乙個引...

友元函式和運算子過載

友元函式 class a void myprint 友元函式的實現,在友元函式中可以訪問私有的屬性 void modify i a p,int a void main 友元類 class a void myprint class b private a a 運算子過載 class point voi...

十三 友元和運算子過載

friend 返回值型別 函式名 引數 friend class 該類類名 friend 返回值型別 類名 成員函式名 引數 成員1 運算子 成員2 等價於 成員1.operator運算子 成員2 成員1 運算子 等價於 成員1.operator運算子 成員1 運算子 成員2 等價於 operato...