C 友元類與友元成員函式

2021-09-19 08:02:24 字數 1629 閱讀 3320

如果類a是類b的友元類,則,類a的成員函式都為類b的友元函式

class b;

class a ;

class b

};class a

};int main()

輸出:

3
分析:a為b的友元類,所以a的所有方法(當然,這裡的所有是指那些引數為類b的物件,否則沒有意義)都可以訪問b物件的私有成員。

可以將另乙個類中的特定成員函式宣告為乙個類的友元

將類b中的成員函式宣告為類a的友元

class b;

class a ;

class b;

void a::f(b &obj)

注意的點(順序很重要):

在b中,要宣告friend void a::f(b &ojb),在這之前,必須要先宣告類a;如果在不再類b前宣告類a,則編譯器會報錯「a不是類或命名空間名稱」。宣告友元之前,一定要先宣告友元成員函式所在的類

那如果這樣寫呢?首先說一下,這樣寫是錯的

class a;

class b;

class a ;

void a::f(b &obj)

編譯器會在friend void a::f(b &obj)報另乙個錯 「使用了未定義型別a」,這說明,類a的宣告一定要放在類b之前。

好了,返回到上面的例子中 。

分析完這裡,還要注意,那就是在類a宣告之前,要有乙個前向宣告class b,否則,編譯器無法識別識別符號b(類a的成員函式的引數為類b的引用,如果沒有前向宣告,目前為止,還不知道b是什麼),所以要先告訴編譯器,b是乙個類,只不過還沒有定義這個類。

最後一點,類b的友元成員函式(a::f())的定義必須放在類b的宣告之後,a::f()要訪問類b的成員,因此要放在類a的定義之後,否則就訪問了乙個未定義的類,這也是不允許的。

class b;

class a ;

class b

};void a::f(b &obj)

int main()

class a;

class b;

class a ;

這裡的前向宣告不寫不會影響執行,但會有警告。

class a;

class b

void showa(a &obj);

};class a

void showb(b &obj);

};void a::showb(b &obj)

void b::showa(a &obj)

int main()

輸出:

1

3

注意的點:

b::f()的定義要放在類a的定義之後,否則就使用了為定義的類

如果要宣告乙個成員函式為友元,那麼一定要先定義這個成員函式所在的類,這樣的話,類a要在類b之前,類b又要在類a之前,所以,這樣的情況是不能實現的

C 友元函式 友元類 友元成員函式

眾所周知,c 控制對類物件私有部分的訪問。通常,公有類方法提供唯一的訪問途徑,但是有時候這種限制太嚴格,以至於不適合特定的程式設計問題。在這種情況下,c 提供了另外一種形式的訪問許可權 友元,友元有3種 友元函式 友元類 友元成員函式。通過讓函式成為類的友元 即 友元函式 可以賦予該函式與類的成員函...

友元函式 友元類 友元成員

友元 友元函式 友元類和友元成員函式 c 有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以fr...

友元 友元函式 友元類和友元成員函式 C

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...