繁体   English   中英

访问说明符对朋友功能有影响吗?

[英]Does access specifier matters for a friend function?

在一个类中,如果函数在不同的说明符(如私有,受保护的或公共的)中被声明为好友,则没有任何区别。 据我了解,朋友功能不是成员。 因此,没关系。 但是,如果我看到静态的-它也不是成员,但是访问说明符很重要。 所以,我有点困惑。 所有这些代码如何正常工作? 以下课程之间有什么区别?

/** 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);

不,没关系。

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

无论好友声明出现在类成员规范的私有,受保护还是公共(9.2)部分中,好友声明的含义都是相同的。

注意:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM