2011-09-18 57 views
3

假设A类是B类的朋友,B类是C类的朋友,A是C或C的朋友,A的朋友,还是两者都没有?“朋友”关系可以在C++的类之间传输吗?

+0

友谊不能通过友谊或继承传递。 –

+0

[Friend范围在C++中]的可能重复(http://stackoverflow.com/questions/437250/friend-scope-in​​-c) –

回答

5

不,C++中的友谊不是传递性的。

从C++ 03标准,11.4-8:

友谊既不继承也不传递的。例如:

class A { 
    friend class B; 
    int a; 
}; 

class B { 
    friend class C; 
}; 

class C { 
    void f(A* p) 
    { 
    p->a++; 
    // error: C is not a friend of A 
    // despite being a friend of a friend 
    } 
}; 

class D : public B { 
    void f(A* p) 
    { 
    p->a++; 
    // error: D is not a friend of A 
    // despite being derived from a friend 
    } 
}; 
1

无。见C++FAQ

友谊是不能继承,传递,或相互

0

C++类的友谊不会以这种方式传播,所以A类就不会为C类的朋友。这就像在Facebook上,如果你的一个朋友与某人交朋友,那个人就不会自动成为你的朋友=)

相关问题