C 友元函式以及運算子過載

2021-06-21 06:36:05 字數 1053 閱讀 3630

一、友元函式的作用

函式的私有和保護變數在類內可以訪問,在類外只可訪問公有變數;派生類在類內只可訪問其基類的公有變數和保護變數,在類外只可訪問其公有變數(要看具體的繼承型別);

因此,在有些情況下,需要訪問類的私有或保護變數時,不得不呼叫其成員函式,因為只有成員函式才有訪問的許可權。因而多出許多時間開銷。

友元函式和類的成員函式的訪問許可權相同,但是其不是類的成員函式,它破壞了類的封裝性;友元函式分為三類:普通的友元函式,友元類,和類的成員函式成為友元函式;

因為友元函式沒有this指標,則引數要有三種情況:

2.1.1要訪問非static成員時,需要物件做引數;

2.1.2要訪問static成員或全域性變數時,則不需要物件做引數;

2.1.3如果做引數的物件是全域性物件,則不需要物件做引數;

(1)普通友元函式:常用的就是運算子過載

#include using namespace std;

class time;};

ostream& operator<<(ostream& out,time& t)

; friend a;

};class a

;void a::test(time& t)

ostream& operator<<(ostream& out,time& t)

;class time;

};void a::test(time& t)

ostream& operator<<(ostream& out,time& t)

{ out<<"("《此時類a的定義一定要在類time之前,此時test()函式的宣告在類time之前,方為正確的,若在之後定義,則test()即使宣告為友元函式,依然無法訪問其私有變數;

ps:剛剛寫的時候,利用標頭檔案和cpp檔案進行封裝,在操作符過載函式前加了個inline 即

inline ostream& operator<<(ostream& out,time& t)

{ return out<<"("<



友元函式以及過載運算子

一 使用友元函式的原因 實現了類之間的共享,減少開銷,提高系統的效率 缺點是 破壞了類的封裝性,能不用盡量不用 二 使用時機 一般是 運算子的過載,資料的共享 三 使用方法 因為友元函式沒有this指標,則引數要有三種情況 1 要訪問非static成員時,需要 物件 做引數 常用 友元函式常含有引數...

過載運算子以及友元函式

在自己已經創造好的類中如果想更加簡化一些運算,比如之前兩個類中的物件如果想要相加必須通過類成員函式來實現,現在假設之前建立好的time類中的兩個物件 time a time b timec c a b 如果想實現上述運算,就要求過載運算子 利用關鍵字operator來實現。首先在標頭檔案中就要宣告過...

C 友元運算子過載函式

運算子過載函式 實現物件之間進行算數運算,實際上是物件的屬性之間做運算 包括 加號 減號 負號 正號 運算子過載函式分為 普通友元運算子過載函式 成員友元運算子過載函式 成員運算子過載函式 運算子運算子過載函式按運算型別為 雙目運算子過載函式,如加 減 乘 除 賦值 單目運算子過載函式 自加 自減 ...