25

クラスのコンストラクターをフレンドとして宣言できますか? ありえないと思います。しかし、どこかでそれができると読みましたが、できませんでした。はいの場合は、サンプルコードを提供してください。

4

1 に答える 1

29

はい、次のことができます。

class Y
{
public:
     Y();
};
class X
{
private:
     void foo() {}  
     friend Y::Y();
};
Y::Y() 
{
   X x; x.foo(); 
}  

11.3フレンズによる [class.friend ]

5) フレンド宣言がオーバーロードされた名前または演算子を参照する場合、パラメーターの型で指定された関数のみがフレンドになります。クラス X のメンバー関数は、クラス Y のフレンドになることができます。

[ 例:

class Y {
friend char* X::foo(int);
friend X::X(char); // constructors can be friends
friend X::~X(); // destructors can be friends
};

—終わりの例]

(私のものを強調)

于 2013-08-19T09:22:05.063 に答える