2011-03-06 122 views
7

我还没有制定出一个具体的案例。但是我即将着手编写一些我觉得最终会需要的代码;所以我想知道是否:两个班可以相互交友吗?

  1. 两个班可以彼此相亲;这样他们就可以自由地访问私人 和其他受保护的成员(我相信答案是肯定的,而且当然我可以简单地尝试一下!)。任何详细的参考或其他问题链接与答案 也非常欢迎。我知道前向声明,并包含守卫编译器 预指令及其使用。我的问题更多地涉及到C++语言的语义 ,它可以提供关于这种相互友谊的可能性 以及如何正确使用它。
  2. 这是通常推荐的吗?人们是否定期使用这种设计? 在什么情况下,这是一个推荐的设计(最好有一些 的例子)。

回答

8

可以有彼此的友谊:

class A { 
    friend class B; 
}; 

class B { 
    friend class A; 
}; 

无论这是有道理的,完全取决于你试图解决的问题。在某些情况下它肯定有意义。

我当前项目中利用相互友谊的唯一例子是容器实现:容器类是其迭代器类的朋友,反之亦然。

+0

也许我们需要另一个术语。这些类是兄弟姐妹,不仅仅是朋友:-) – 2011-03-06 05:15:02

+12

@Martin:也许有人可以起草一个建议,为此添加一个“bff”关键字到C++! – 2011-03-06 05:16:07

+9

@马丁:*有福利的朋友*?一个“如果你告诉我你的,我会告诉你我的”关系。 – nybbler 2011-03-06 05:17:30