“朋友”关系可以在 C++ 的类之间转移吗?

Posted

技术标签:

【中文标题】“朋友”关系可以在 C++ 的类之间转移吗?【英文标题】:Can the "friend" relationship be transferred among C++'s class? 【发布时间】:2011-09-18 14:30:24 【问题描述】:

假设 A 类是 B 类的朋友,B 是 C 类的朋友,A 是 C 的朋友还是 C 是 A 的朋友,或者两者兼而有之,或者没有?

【问题讨论】:

友谊不能通过友谊或继承来转移。 Friend scope in C++ 的可能重复项 【参考方案1】:

不,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
  
;

【讨论】:

【参考方案2】:

没有。见C++FAQ:

友谊不是继承、传递或互惠的

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于“朋友”关系可以在 C++ 的类之间转移吗?的主要内容,如果未能解决你的问题,请参考以下文章