我们能够将一个类的构造函数声明为友元吗?我认为是不行的。但我在某个地方读到过可以这样做,但我无法实现。如果可以的话,你能否提供一些示例代码呢?
我们能够将一个类的构造函数声明为友元吗?我认为是不行的。但我在某个地方读到过可以这样做,但我无法实现。如果可以的话,你能否提供一些示例代码呢?
可以的:
class Y
{
public:
Y();
};
class X
{
private:
void foo() {}
friend Y::Y();
};
Y::Y()
{
X x; x.foo();
}
根据11.3 Friends [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
};
—结束示例]
(重点是我的)
class Y
{
public:
friend Y(int);
}
如果是,你会如何定义 Y(int)
? - Shreyasclass Y { friend class Y; };
是有效但冗余的。同样适用于 class Y { Y(int); friend Y::Y(int); };
。 - jrok
friend <在这里填什么> ;
?这对这个问题没有任何帮助。 - MSaltersfriend <函数名称>;
但是构造函数没有名称,所以我可以理解混淆的原因。 - MSalters