2013-08-23 6 views
8

今日私は友人の機能に疑問があります。 2つのクラスに同じ機能がありますか? friend void f1(); クラスAとクラスBで宣言してくださいこれは可能ですか?その場合、関数f1()は2つのクラスのメンバーにアクセスできますか?2つのクラスがフレンド機能を共有できますか?

+2

はいことが可能です。はい、 'f1()'は両方のクラスのメンバーにアクセスできます。 – juanchopanza

+6

簡単な例をコンパイルしようとしましたか?これはテストするのが簡単なようです。 – Max

+2

これは可能ではないと思いますか? – stijn

答えて

0

の機能の制限はありません。classの場合は問題ありません。

+0

さて、関数に名前を付けることができる必要がありますが、それは自然な制限です。例えば。 'struct {静的void foo(); };または他の翻訳単位の匿名名前空間で機能します。 – MSalters

14

の例では、このベストを説明します:

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

は、この情報がお役に立てば幸い!上記のコードに

+0

ありがとうございました非常に男の例は非常に素晴らしく、理解しやすいでした – user2236974

+0

あなたはようこそ! – iluvthee07

0

補正

#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); 
} 
関連する問題