2013-08-23 7 views
8

Heute habe ich Zweifel bezüglich der Funktion von Freunden. Können zwei Klassen dieselbe Friend-Funktion haben? Sagen Sie Beispiel friend void f1(); deklariert in Klasse A und Klasse B. Ist das möglich? Wenn ja, kann eine Funktion f1() auf die Mitglieder zweier Klassen zugreifen?Können 2 Klassen eine Freundesfunktion teilen?

+2

Ja, es ist möglich. Ja, 'f1()' hätte Zugriff auf Mitglieder beider Klassen. – juanchopanza

+6

Haben Sie versucht, ein einfaches Beispiel zu erstellen? Dies scheint so zu sein, als wäre es leicht zu testen. – Max

+2

Was lässt Sie denken, dass dies nicht möglich wäre? – stijn

Antwort

0

Es gibt keine Einschränkung auf welche Funktion friends 's von class' s sein kann oder kann, also ja, es gibt kein Problem damit.

+0

Nun, Sie müssen in der Lage sein, die Funktion zu benennen, aber das ist eine natürliche Einschränkung. Z.B. 'struct {statische Leere foo(); }; 'oder funktioniert in anonymen Namespaces in anderen Übersetzungseinheiten. – MSalters

14

Ein Beispiel wird erklärt, dies am besten:

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

hoffe, das hilft!

+0

Vielen Dank Mann Ihr Beispiel war sehr nett und leicht zu verstehen – user2236974

+0

Gern geschehen! – iluvthee07

0

Korrektur der obigen Code

#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); 
} 
Verwandte Themen