简体   繁体   English

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

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

In a class, if the function is declared as friend within the different specifier like - private, protected, or public, then is there any difference. 在一个类中,如果函数在不同的说明符(如私有,受保护的或公共的)中被声明为好友,则没有任何区别。 As per my understanding, friend function is not a member. 据我了解,朋友功能不是成员。 Thus, it shouldn't matter. 因此,没关系。 But, if I see static - it is also not a member, but access specifier matters a lot. 但是,如果我看到静态的-它也不是成员,但是访问说明符很重要。 So, I am a bit confused. 所以,我有点困惑。 How all these code works fine? 所有这些代码如何正常工作? Is there any difference among the following classes? 以下课程之间有什么区别?

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

No, it doesn't matter. 不,没关系。

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

The meaning of the friend declaration is the same whether the friend declaration appears in the private, protected or public (9.2) portion of the class member-specification. 无论好友声明出现在类成员规范的私有,受保护还是公共(9.2)部分中,好友声明的含义都是相同的。

Note: 注意:

A static function declared within the class is still a class member. 在类中声明的静态函数仍然是类成员。 A friend function is not. 朋友功能不是。

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

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