2013-08-23 11 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); 
}