“朋友”关系可以在 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++ 的类之间转移吗?的主要内容,如果未能解决你的问题,请参考以下文章

网上社保转移被拒绝的原因怎么查?

转移到ios可以转移微信聊天记录吗

yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称平等的

我可以使用 PayPal API 将资金从一个 PayPal 账户转移到另一个账户而无需支付任何费用吗?

3D点集之间计算转移矩阵,旋转R,转移T,新增缩放s (总结全面)

在 UCMA 中取消转移