C 友元宣告與定義依賴關係

2021-08-14 22:22:46 字數 1023 閱讀 3947

#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 中提供三種友元關係的實現方式,友元函式 友元成員函式 友元類。友元函式 既將乙個普通的函式在乙個類中說明為乙...