將類定義爲朋友類時,定義放置在哪個訪問器部分中是否重要,如果是這樣,是否會更改該朋友有權訪問的成員?朋友類和訪問器部分的定義
class aclass
{
private:
// friend bclass;
public:
// friend bclass;
protected:
// friend bclass;
};
class bclass
{};
將類定義爲朋友類時,定義放置在哪個訪問器部分中是否重要,如果是這樣,是否會更改該朋友有權訪問的成員?朋友類和訪問器部分的定義
class aclass
{
private:
// friend bclass;
public:
// friend bclass;
protected:
// friend bclass;
};
class bclass
{};
朋友功能都沒有按約定放置的任何訪問器的內部,因爲根據定義它們不是類的一部分。一旦你將友元類/函數在給定類中(說「ACLASS」)隨時隨地
class Elephants
{
//friend void notAMemberFuncion(argument 123);
public:
// member functions;
protected:
// data members;
};
:你可能會做這樣的事情。它將可以訪問所有定義的成員(不論公共/私人/受保護);例如:
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拷貝構造函數(如果它沒有在任何地方定義)。
朋友類/函數可以訪問類的所有私有/受保護/公共成員,該朋友類/函數所在的訪問節沒有任何區別。 建議將朋友類/函數放在公共部分,因爲朋友是類接口的一部分。
訪問說明並不適用於友元函數/類
你可以聲明在任何訪問說明符和函數/類的朋友函數或類將仍然可以訪問所有的成員變量(公共,受保護&私人)該類。
閱讀這個問題,而不是談論朋友功能,而是談論朋友類。 – Zamfir 2011-04-07 03:44:12