2013-08-23 61 views
8

今天我對朋友功能有疑問。 兩個類可以有相同的朋友功能嗎? 舉例 friend void f1(); 在A類和B類中聲明。這可能嗎?如果是這樣,函數f1()是否可以訪問兩個類的成員?2個班可以分享朋友功能嗎?

+2

是的,它是可能的。是的,'f1()'可以訪問這兩個類的成員。 – juanchopanza

+6

你試過編譯一個簡單的例子嗎?這似乎很容易測試。 – Max

+2

是什麼讓你覺得這不可能? – stijn

回答

0

對於class的功能是否可以friends是沒有限制的,所以是的,這是沒有問題的。

+0

那麼,你必須能夠命名這個函數,但這是一個自然的限制。例如。 'struct {static 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); 
}