访问说明符对于朋友函数是否重要?

时间:2015-01-04 03:49:21

标签: c++ friend

在一个类中,如果函数在不同的说明符中被声明为friend,例如private,protected或public,那么是否有任何区别。据我了解,朋友的功能不是会员。因此,它应该无关紧要。但是,如果我看到静态 - 它也不是成员,但访问说明符很重要。所以,我有点困惑。所有这些代码如何工作正常?以下课程有什么不同吗?

/** Private friend function **/

class frienddemoFunction
{
  private:
      unsigned int m_fanSpeed;
      unsigned int m_dutyCycle;
      /** This function is not a member of class frienddemo **/
      friend void printValues(frienddemoFunction &d);

  public:
      void setFanSpeed(unsigned int fanSpeed);
      unsigned int getFanSpeed();

};


/** Protected -- Friend Function **/
class frienddemoFunction
{
  private:
      unsigned int m_fanSpeed;
      unsigned int m_dutyCycle;

  public:
      void setFanSpeed(unsigned int fanSpeed);
      unsigned int getFanSpeed();

 protected:

 /** This function is not a member of class frienddemo **/
      friend void printValues(frienddemoFunction &d);


};

class frienddemoFunction
{
  private:
      unsigned int m_fanSpeed;
      unsigned int m_dutyCycle;

  public:
      void setFanSpeed(unsigned int fanSpeed);
      unsigned int getFanSpeed();

 /** This function is not a member of class frienddemo **/
      friend void printValues(frienddemoFunction &d);


};


 /** This function is not a member of class frienddemo **/
  friend void printValues(frienddemoFunction &d);

1 个答案:

答案 0 :(得分:5)

不,没关系。

C ++标准,第11.3 / 9节[friend.class]

  无论朋友是谁,朋友声明的含义都是一样的   声明出现在私人,受保护或公开(9.2)部分   类成员规范。

注意:

在类中声明的静态函数仍然是类成员。朋友的功能不是。