2011-04-07 64 views
5

將類定義爲朋友類時,定義放置在哪個訪問器部分中是否重要,如果是這樣,是否會更改該朋友有權訪問的成員?朋友類和訪問器部分的定義

class aclass 
{ 
private: 
    // friend bclass; 

public: 
    // friend bclass; 

protected: 
    // friend bclass; 
}; 

class bclass 
{}; 

回答

1

朋友功能都沒有按約定放置的任何訪問器的內部,因爲根據定義它們不是類的一部分。一旦你將友元類/函數在給定類中(說「ACLASS」)隨時隨地

class Elephants 
{ 
//friend void notAMemberFuncion(argument 123); 

public: 
// member functions; 

protected: 
// data members; 
}; 
+1

閱讀這個問題,而不是談論朋友功能,而是談論朋友類。 – Zamfir 2011-04-07 03:44:12

2

:你可能會做這樣的事情。它將可以訪問所有定義的成員(不論​​公共/私人/受保護);例如:

class aClass 
{ 
public: int pub; void fun1() {} 
protected: int pro; void fun2() {} 
private: int pri; aClass(const aClass& o); 
    friend void outsider(); 
}; 

朋友函數outsider()可以訪問pub,pro,pri,fun1,fun2;但在這種情況下不是aClass拷貝構造函數(如果它沒有在任何地方定義)。

1

朋友類/函數可以訪問類的所有私有/受保護/公共成員,該朋友類/函數所在的訪問節沒有任何區別。 建議將朋友類/函數放在公共部分,因爲朋友是類接口的一部分。

3

訪問說明並不適用於友元函數/類
你可以聲明在任何訪問說明符和函數/類的朋友函數或類將仍然可以訪問所有的成員變量(公共,受保護&私人)該類。