#ifndef a_h
#define a_h
#include using std::cout;
using std::endl;
class b;//前向宣告
class a
;#endif
#ifndef b_h
#define b_h
//class a;//因先 #include "a.h" ,再包含 #include "b.h" ,故可以省略前向宣告(a已先定義)
class b
b():i(0){}
//友元宣告
friend void a::dis(const b &a);//其它類的成員函式作為友元函式
friend void test(const b& b);//普通的非成員函式作為友元函式
};#endif
#ifndef c_h
#define c_h
class c
friend class d;//友元類,只是乙個宣告,不作為成員一部分,故無需先建立d的定義
};#endif
#ifndef d_h
#define d_h
#include using std::cout;
using std::endl;
//class c;//因先 #include "c.h" ,再包含 #include "d.h" ,故此語句可以省略
class d
{public:
void dis(const c& c)//dis成員函式定義,這裡要用到形參c,故c必須先定義完整,所以先#include "c.h"
{ cout<#include "a.h"
#include "b.h"
#include "c.h"
#include "d.h"
using namespace std;
void a::dis(const b &b)//必須最後定義,因需要兩個類完整定義後,才能定義該成員函式
{ cout<
友元宣告和友元定義的相互依賴
當將乙個類a的成員函式a f設定成類b的友元時,需要預先定義類a,否則不能將a f指定為友元。而在定義b之後,才能定義a f,因為a f被設為 友元正是為了訪問類b的成員函式。所以,可以按照如下的順序 下面是乙個例子 include include using namespace std class...
c 友元關係與繼承
友元關係不能繼承。基類的友元對派生類的成員沒有特殊訪問許可權。如果基類被授予友元關係,則只有基類具有特殊訪問許可權,該基類的派生類不能訪問授予友元關係的類。class base frnd has no access to members in d1 class d1 public base clas...
C 友元關係
在封裝中c 類資料成員大多情況是private屬性 但是如果介面採用多引數實現肯定影響程式效率 然而這時候如果外界需要頻繁訪問這些私有成員,就不得不需要乙個既安全又理想的 後門 友元關係 c 中提供三種友元關係的實現方式,友元函式 友元成員函式 友元類。友元函式 既將乙個普通的函式在乙個類中說明為乙...