2013-08-19 13 views
24

Possiamo dichiarare il costruttore di una classe come amico? Penso che non possa essere. Ma ho letto da qualche parte che può essere, ma non ero in grado di farlo. Se sì, puoi fornire qualche codice di esempio.Una funzione di costruzione può essere un amico in C++?

+0

Perché non dichiarare l'intera classe come amico? – wilx

+0

inserisci il tuo codice. –

+1

@KarolyHorvath: È utile in generale, ma cosa mostreresti qui? 'amico ;'? Questo non aggiunge nulla a questa domanda. – MSalters

risposta

30

Sì, è possibile:

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

come da 11.3 Amici [class.friend]

5) Quando una dichiarazione amico fa riferimento a un nome o un operatore di overload, solo la funzione specificata dai tipi di parametro diventa un amico. Una funzione membro di una classe X può essere un amico di una classe di Y.

[Esempio:

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

-end esempio]

(sottolineatura mia)

+2

+1 per scavare l'esempio dallo standard :) – SteveLove

+0

è valido 'classe Y { pubblico: amico Y (int); } ' Se sì, come definiresti Y (int); – Shreyas

+3

@Shreyas che non avrebbe senso, perché una classe (o un membro) dovrebbe essere un'amica di se stessa? –

Problemi correlati