两个班可以互相交往吗?

squ*_*boo 7 c++

我还没有找出具体案例.但我即将着手编写一些我认为最终需要这些代码的代码; 所以我想知道是否:

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

Jam*_*lis 8

可以有相互的友谊:

class A {
    friend class B;
};

class B {
    friend class A;
};
Run Code Online (Sandbox Code Playgroud)

这是否有意义完全取决于您试图解决的问题.在某些情况下它绝对有意义.

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

  • @Martin:也许有人可以起草一个提议,为此向C++添加一个`bff`关键字! (12认同)
  • @Martin:*有福利的朋友*?一个"如果你告诉我你的,我会告诉你我的"关系. (9认同)
  • 也许我们需要另一个术语。这些班级不仅是朋友,而且是兄弟姐妹:-) (2认同)
  • 但是 - 一般来说,最好避免像这样紧密耦合的设计. (2认同)