Подтвердить что ты не робот

Может ли функция конструктора быть другом в С++?

Можно ли объявить конструктор класса другом? Думаю, этого не может быть. Но я где-то читал, что это может быть, но я не мог этого сделать. Если да, вы можете указать примерный код.

4b9b3361

Ответ 1

Да, он может:

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
};

-end пример]

(акцент мой)