代码之家  ›  专栏  ›  技术社区  ›  Marcin

C++中的朋友范围

  •  17
  • Marcin  · 技术社区  · 16 年前

    只是澄清:这是纯理论的C++语言问题,而不是设计建议问题。

    5 回复  |  直到 16 年前
        1
  •  134
  •   Community CDub    4 年前

    C++中的友谊不是传递的:


    虽然约翰的朋友蒂姆是个浪费者,虽然约翰是我的朋友,但我不把蒂姆当作朋友,因此我不让他使用我的无线连接。

    友谊不是遗传的

    另外,约翰的孩子是一群流氓,所以我不相信他们,他们肯定不是我的朋友,也不是我自己的孩子,我尽可能信任他们。

    虽然我们的孩子不能直接接入无线网络,但他们可以通过我们接入。因此,如果约翰的孩子通过约翰接入我的无线网络,他们就可以接入我的无线网络(即他们受到监督和保护) 约翰)。

    约翰有一份政府工作,所以不幸的是,他不能信任任何人,尤其是在无线方面。

    这允许像复制构造函数这样的东西,您可以访问另一个对象的私有成员,即使没有真正的访问。

    因此,我也自动成为我所有克隆人的朋友:-),因为他们只是我的其他实例。

        2
  •  25
  •   Johannes Schaub - litb    16 年前

    (A is friend of B) and (B is friend of C) does not mean (A is friend of C)
    

    而且,友谊是不对称的。

    (A is friend of B) does not mean (B is friend of A) 
    

        3
  •  4
  •   Marcin    16 年前
        4
  •  4
  •   Luis    16 年前

    因为C++中的友谊不是传递性的。实际上,应该尽可能避免它,因为它会在系统中引入复杂性。

    假设B是一个中介类,a和C是需要管理的组件,您真的认为按钮需要访问复选框的实现有意义吗?

        5
  •  3
  •   kiriloff    11 年前

    这一切在这里得到了很好的总结:

    What does it mean that "friendship isn't inherited, transitive, or reciprocal"?
    

    这意味着从friend类派生的类不会 自动成为朋友(你信任朋友的孩子吗?), 信任你朋友的朋友吗?),并且 作为“朋友”的另一个类不会自动成为的朋友

    从…起

    http://yosefk.com/c++fqa/friend.html#fqa-14.4