友元函式對比與例項

2021-08-25 11:36:35 字數 3069 閱讀 7182

頭函式 mytime2.h

// mytime2.h -- time class after operator overloading

#ifndef mytime2_h_

#define mytime2_h_

class time

;#endif

函式定義

// mytime2.cpp  -- implementing time methods

#include #include "mytime2.h"

time::time()

time::time(int h, int m )

void time::addmin(int m)

void time::addhr(int h)

void time::reset(int h, int m)

time time::operator+(const time & t) const

time time::operator-(const time & t) const

time time::operator*(double mult) const

void time::show() const

主函式

// usetime2.cpp -- using the third draft of the time class

// compile usetime2.cpp and mytime2.cpp together

#include #include "mytime2.h"

int main()

上面乘法運算子將乙個time值與另乙個double值結合。但需要限制運算子的使用方法。左側的操作符必須是呼叫物件。

也就是說: a=b * 2.75;

可以轉化為 a=b.operator * (2.75);

但如果 a=2.75 * b; 則需要函式原型為time operator* (double m,const time &t);

這是個返回值為time型別的非成員函式(宣告在類外),不能直接訪問類私有成員。

但是可以將time物件t作為乙個整體使用,讓成員函式來處理私有制,因此可以不必是友元。

標頭檔案

// mytime3.h -- time class with friends

#ifndef mytime3_h_

#define mytime3_h_

#include class time

;time operator*(double m, const time & t);

#endif

函式定義

// mytime3.cpp  -- implementing time methods

#include "mytime3.h"

time::time()

time::time(int h, int m )

void time::addmin(int m)

void time::addhr(int h)

void time::reset(int h, int m)

time time::operator+(const time & t) const

time time::operator-(const time & t) const

time time::operator*(double mult) const

std::ostream & operator<<(std::ostream & os, const time & t)

time operator*(double m, const time & t)

// inline definition

主函式

-- using the fourth draft of the time class

// compile usetime3.cpp and mytime3.cpp together

#include #include "mytime3.h"

int main()

標頭檔案

// mytime3.h -- time class with friends

#ifndef mytime3_h_

#define mytime3_h_

#include class time

// inline definition

friend std::ostream & operator<<(std::ostream & os, const time & t);

};#endif

函式定義

// mytime3.cpp  -- implementing time methods

#include "mytime3.h"

time::time()

time::time(int h, int m )

void time::addmin(int m)

void time::addhr(int h)

void time::reset(int h, int m)

time time::operator+(const time & t) const

time time::operator-(const time & t) const

time time::operator*(double mult) const

std::ostream & operator<<(std::ostream & os, const time & t)

主函式

-- using the fourth draft of the time class

// compile usetime3.cpp and mytime3.cpp together

#include #include "mytime3.h"

int main()

友元函式與友元類 友元與巢狀

友元提供了不同類的成員函式之間 類的成員函式與一般函式之間進行資料共享的機制。通過友元,乙個不同函式或另乙個類中的成員函式可以訪問類中的私有成員和保護成員。c 中的友元為封裝隱藏這堵不透明的牆開了乙個小孔,外界可以通過這個小孔窺視內部的秘密。友元的正確使用能提高程式的執行效率,但同時也破壞了類的封裝...

友元函式與友元類

物件導向程式設計的乙個重要思想就是實現資料隱藏 類的封裝特性 即 非成員函式不能訪問private 或者 protected 變數。有些時候我們需要不經成員函式而訪問private 或者 protected資料,那就需要用到 友元函式 或者友元類。使用friend關鍵字在類內任意位置宣告函式為友元函...

友元函式與友元類

友元函式 需要友元的原因 1 普通函式需要直接訪問乙個類的保護或私有資料成員 2 需要友元的另乙個原因是為了方便過載操作符的使用 友元函式不是成員函式,它是類的朋友,因而能夠訪問類的全部成員 在類的內部,只能宣告它的函式原型,加上friend 關鍵字 優缺點 優點 能夠提高效率,表達簡單,清晰 缺點...