2013-08-23 12 views
8

Dziś mam wątpliwości dotyczące funkcji znajomego. Czy dwie klasy mają tę samą funkcję znajomego? Powiedz przykład friend void f1(); zadeklarowana w klasie A i klasie B. Czy to możliwe? Jeśli tak, czy funkcja f1() może uzyskać dostęp do elementów dwóch klas?Czy 2 klasy mogą korzystać z funkcji znajomego?

+2

Tak jest to możliwe. Tak, 'f1()' miałaby dostęp do członków obu klas. – juanchopanza

+6

Czy próbowałeś skompilować prosty przykład? Wydaje się, że byłoby to łatwe do przetestowania. – Max

+2

Dlaczego uważasz, że to nie jest możliwe? – stijn

Odpowiedz

0

Nie ma ograniczeń co do funkcji, które mogą lub nie mogą być friends 's z class, więc tak nie ma problemu z tym.

+0

Cóż, musisz być w stanie nazwać funkcję, ale jest to naturalne ograniczenie. Na przykład. 'struct {static void foo(); }; 'lub funkcje w anonimowych przestrzeniach nazw w innych jednostkach tłumaczeniowych. – MSalters

14

Przykładem wyjaśni to najlepiej:

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

Nadzieja to pomaga!

+0

Bardzo dziękuję, dziękuję bardzo, mój przykład był bardzo miły i łatwy do zrozumienia. – user2236974

+0

Nie ma za co! – iluvthee07

0

korekta do powyższego kodu

#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); 
} 
Powiązane problemy