Dichiarazioni di tipo friend
Se si dichiara una funzione friend che non è stata dichiarata, tale funzione viene esportata ambito di inclusione dei nonclass.
Le funzioni dichiarate in una dichiarazione friend vengono considerate come se fossero dichiarate utilizzando il extern parola chiave.(Per ulteriori informazioni su extern, vedere Identificatori statici della classe di archiviazione).
Sebbene le funzioni con ambito globale possono essere dichiarate come friend prima dei prototipi, le funzioni membro non possono essere dichiarate come friend prima dell'aspetto della relativa dichiarazione di classe completa.Nel codice seguente viene illustrato perché questa operazione non riuscita:
class ForwardDeclared; // Class name is known.
class HasFriends
{
friend int ForwardDeclared::IsAFriend(); // C2039 error expected
};
Nell'esempio precedente il nome della classe ForwardDeclared nell'ambito, ma nella dichiarazione completa (in particolare, la parte che dichiara la funzione IsAFriend - non è noto.di conseguenza, friend dichiarazione della classe HasFriends genera un errore.
Per dichiarare due classi che sono elementi friend dell'altro, l'intera seconda classe deve essere specificata come friend di classe.Lo scopo di questa restrizione è che il compilatore dispone di informazioni sufficienti per dichiarare le singole funzioni friend solo nel punto in cui la seconda classe è dichiarata.
[!NOTA]
Sebbene l'intera seconda classe deve essere friend alla prima classe, è possibile selezionare le funzioni nella prima classe saranno friend della seconda classe.