クラスをフレンド クラスとして定義する場合、その定義がどのアクセサ セクションに配置されるかは重要ですか。
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」など)内にフレンドクラス/関数を配置すると、どこでも. クラスのすべての定義済みメンバーにアクセスできます(public/private/protected に関係なく)。例えば:
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 コピー コンストラクターではありません (どこにも定義されていない場合)。
フレンド関数は、定義上、クラスの一部ではないため、慣例によりアクセサ内に配置されません。あなたはこのようなことをするかもしれません:
class Elephants
{
//friend void notAMemberFuncion(argument 123);
public:
// member functions;
protected:
// data members;
};
フレンド クラス/関数は、クラスのすべてのプライベート/保護/パブリック メンバーにアクセスできます。フレンド クラス/関数が配置されているアクセス セクションに違いはありません。フレンドはクラス インターフェイスの一部であるため、パブリック セクションにフレンド クラス/関数を配置することをお勧めします。