2013-08-23 11 views
8

Oggi ho un dubbio sulla funzione amico. Due classi possono avere la stessa funzione di amicizia? Dire esempio friend void f1(); dichiarato in classe A e classe B. È possibile? In tal caso, una funzione f1() può accedere ai membri di due classi?2 classi possono condividere una funzione di amicizia?

+2

Sì, è possibile. Sì, 'f1()' avrebbe accesso ai membri di entrambe le classi. – juanchopanza

+6

Hai provato a compilare un semplice esempio? Sembra che sarebbe facile da testare. – Max

+2

Cosa ti fa pensare che questo non sarebbe possibile? – stijn

risposta

0

Non c'è alcuna limitazione su quale funzione può o non può essere friends di class, quindi sì, non c'è alcun problema con questo.

+0

Bene, devi essere in grado di nominare la funzione, ma questa è una restrizione naturale. Per esempio. 'struct {static void foo(); }; 'o funziona in spazi dei nomi anonimi in altre unità di traduzione. – MSalters

14

Un esempio spiegherà meglio questo:

class B;     //defined later 

void add(A,B); 

class A{ 
    private: 
    int a; 
    public: 
    A(){ 
     a = 100; 
    } 
    friend void add(A,B); 
}; 

class B{ 
    private: 
    int b; 
    public: 
    B(){ 
     b = 100; 
    } 
    friend void add(A,B); 
}; 

void add (A Aobj, B Bobj){ 
    cout << (Aobj.a + Bobj.b); 
} 

main(){ 
    A A1; 
    B B1; 
    add(A1,B1); 
    return 0; 
} 

Spero che questo aiuti!

+0

Grazie mille, l'esempio è stato molto bello e facile da capire – user2236974

+0

Siete i benvenuti! – iluvthee07

0

correzione al codice di cui sopra

#include<iostream> 
using namespace std; 
class B;     //defined later 
class A;     //correction (A also need be specified) 
void add(A,B); 

class A{ 
    private: 
    int a; 
    public: 
    A(){ 
     a = 100; 
    } 
    friend void add(A,B); 
}; 

class B{ 
    private: 
    int b; 
    public: 
    B(){ 
     b = 100; 
    } 
    friend void add(A,B); 
}; 

void add (A Aobj, B Bobj){ 
    cout << (Aobj.a + Bobj.b); 
} 

main(){ 
    A A1; 
    B B1; 
    add(A1,B1); 
    return 0; 
} 
-1
#include<iostream> 

using namespace std; 

class first 
{ 
    friend void getdata(first object1, int i); 
}; 

class second 
{ 
    friend void getdata(second object2, int j); 
}; 

getdata(first object1, int i, second object2, int j) 
{ 
    cout<<i+j; 
} 

main() 
{ 
    first object1; 
    second object2; 
    getdata(object1, 5, object2, 7); 
} 
Problemi correlati