代码之家  ›  专栏  ›  技术社区  ›  Prabhu. S

在什么情况下应该将成员函数声明为友元?

  •  5
  • Prabhu. S  · 技术社区  · 17 年前

    在什么样的情况下,我们会将一个成员函数声明为“友元函数”?““友元函数”违背OOP的“封装”这一核心概念,它的确切用途是什么?

    6 回复  |  直到 17 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    this thread .

    this article 有关好友类和函数的更多信息。

        2
  •  2
  •   Brian Neal    17 年前

    这些类型的情况并不经常出现,但有时您不得不使用不同的类和函数实现抽象或接口。经典的例子是实现某种类型的复数类。非成员运算符函数被赋予主复数类。

    我还记得在C++中用CORBA编程时所做的事情。CORBA迫使我使用单独的类来实现CORBA服务。但对于我们软件的某个特定部分,我需要将它们作为一个接口结合在一起。友谊使这两个类能够一起工作,为我们软件的一部分提供无缝服务。

    能够将另一个类上的特定成员函数标记为您的类的朋友可能看起来更奇怪,但这只是一种严格控制友谊的方式。您只允许其一个成员函数访问,而不允许整个其他类作为您的朋友“进入”。同样,这并不常见,但是 非常 在你需要的时候有用。

        3
  •  1
  •   Igor    17 年前
        4
  •  0
  •   Loki Astari    17 年前

    有时,公共/私人/受保护的保护级别不足以满足实际情况。因此,我们给出了一个小的get out子句,它有助于不必让方法公开访问。


    如果我有一个类在需要访问的同一个包中,我会考虑使用朋友。如果它是另一个包中的一个类,那么我想知道为什么这个类需要访问,看看我的设计。

        5
  •  0
  •   user3458 user3458    17 年前

    我发现有一点是相关的:成员类可以访问包含类的私有部分。这有时可能是“朋友”的更好选择。

    class A
    {
    private:
      int b;
    public:
      class MemberNotFriend {
      public:
        static void test() {
          A a;
          a.b = 0;
        }
      };
    
    
    };
    
    
    void test()
    {
      A::MemberNotFriend::test();
    }
    
        6
  •  0
  •   Leftium    16 年前

    我有一个游戏,其中每个精灵对象存储其信息,如X,Y位置作为私人成员。

    因此,游戏对象类有一个friend函数:render()。render()函数是在游戏对象类之外实现的,但它可以根据需要访问X、Y位置membefrs来渲染游戏对象。

    推荐文章