在c++中類具有封裝的隱蔽性,由於語言特性,只有成員函式才能訪問私有成員,非成員函式只能訪問類中的公有成員,可是有時候我們需要非成員函式呼叫私有成員,這個時候要是將私有成員定義為公有的又會破壞c++的封裝,為了解決上述問題,我們提出了友元的概念
友元分為友元函式和友元類,友元函式就是非成員函式可是當我們宣告成友元函式的時候也可以訪問類中的私有成員,友元類就是可以訪問另乙個類中所有私有成員,用關鍵字friend宣告。可是我們需要注意的是友元一定意義上破壞了c++中的封裝,所以我們很少用友元,只在恰當的地方謹慎使用。
這裡舉例乙個日期類來演示友元函式
#includeusing namespace std;
class date
date(const date& d)
friend void display(const date& d);
friend void operator<<(ostream& out, const date& d);
friend void operator>>(istream& in, date& d);
private:
int _year;
int _month;
int _day;
};void display(const date& d)
void operator<<(ostream& out, const date& d)
void operator>>(istream& in, date& d)
將乙個類定義為另乙個類的友元類後這個類可以訪問友元類的所有成員,不過一定程度上破壞了封裝。
#include#includeusing namespace std;
class time
private:
int _hour;
int _minute;
int _second;
};class date
void display(time& t)
private:
int _year;
int _month;
int _day;
time t;
};int main()
友元 友元函式 友元類和友元成員函式 C
有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...
友元 友元函式 友元類和友元成員函式 C
有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...
C 友元 友元函式 友元類和友元成員函式
有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...