2013-08-19 2 views
24

Können wir Konstruktor einer Klasse als Freund deklarieren? Ich denke, das kann nicht sein. Aber ich habe irgendwo gelesen, dass es sein kann, aber ich konnte es nicht tun. Wenn ja, können Sie bitte einen Beispielcode angeben.Kann eine Konstruktorfunktion ein Freund in C++ sein?

+0

Warum erklärst du nicht die ganze Klasse als Freund? – wilx

+0

poste deinen Code. –

+1

@KarolyHorvath: Das ist im Allgemeinen nützlich, aber was würdest du hier zeigen? 'Freund ;'? Das fügt dieser Frage nichts hinzu. – MSalters

Antwort

30

Ja, es kann:

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

Per 11.3 Freunde [class.friend]

5) Wenn ein Freund Erklärung zu einem überlasteten Namen oder Operator bezieht, nur die Funktion angegeben Durch die Parametertypen wird ein Freund.

(emphasis Mine: A Elementfunktion einer Klasse X kann

[

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

-End Beispiel Beispiele] ein Freund von einer Klasse sein, Y.)

+2

+1 für das Ausgraben des Beispiels aus dem Standard :) – SteveLove

+0

ist dies gültig 'Klasse Y { öffentlich: Freund Y (int); } ' Wenn ja, wie würdest du Y (int) definieren? – Shreyas

+3

@Shreyas das würde keinen Sinn machen, warum sollte eine Klasse (oder ein Mitglied) ein Freund von sich selbst sein? –

Verwandte Themen