5

クラスをフレンド クラスとして定義する場合、その定義がどのアクセサ セクションに配置されるかは重要ですか。

class aclass
{
private:
   // friend bclass;

public:
   // friend bclass;

protected:
   // friend bclass;
};

class bclass
{};
4

4 に答える 4

3

アクセス指定子はフレンド関数/クラスには適用されません。任意のアクセス指定子の下でフレンド
関数またはクラス を宣言でき

于 2011-04-07T04:35:36.053 に答える
2

特定のクラス(「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 コピー コンストラクターではありません (どこにも定義されていない場合)。

于 2011-04-07T03:48:34.473 に答える
1

フレンド関数は、定義上、クラスの一部ではないため、慣例によりアクセサ内に配置されません。あなたはこのようなことをするかもしれません:

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

public:
// member functions;

protected:
// data members;
};
于 2011-04-07T03:38:52.600 に答える
1

フレンド クラス/関数は、クラスのすべてのプライベート/保護/パブリック メンバーにアクセスできます。フレンド クラス/関数が配置されているアクセス セクションに違いはありません。フレンドはクラス インターフェイスの一部であるため、パブリック セクションにフレンド クラス/関数を配置することをお勧めします。

于 2011-04-07T03:57:12.883 に答える