朋友类定义

时间:2012-05-06 09:30:08

标签: c++ methods static friend

今天我查看了boost::asio::ip::address的标题源代码,发现了以下几行:

class address
{
  // I removed some irrelevant lines here...

  public:

  /// Compare addresses for ordering.
  friend bool operator>=(const address& a1, const address& a2)
  {
    return !(a1 < a2);
  }
};

现在我知道friend的用途,但我从未见过它的定义,在类定义中。

所以我的问题是,这个friend声明做了什么?在我看来,operator>=不是此处的方法,但也没有static关键字。

在这种特殊情况下,friend会替换static吗?

1 个答案:

答案 0 :(得分:2)

是和否。它不会替换static,因为在调用运算符时不需要限定名称。它有点像你不需要一个类实例来调用它。

就像在课堂外宣布操作员一样:

class address
{
  // I removed some irrelevant lines here...

  public:

  /// Compare addresses for ordering.
  friend bool operator>=(const address& a1, const address& a2);
};

inline bool operator>=(const address& a1, const address& a2)
{
   return !(a1 < a2);
}

您可以从班级访问私有和受保护的方法。

考虑在类中重载流操作符,可以应用相同的技术。