c++ - 访问说明符对 friend 功能重要吗?

标签 c++ friend

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

/** 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]

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.

注意:

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

关于c++ - 访问说明符对 friend 功能重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27762167/

相关文章:

c++ - std::ostringstream 作为函数参数的问题

c++ - 将类的方法作为 friend

c++ - 友元声明阻止外部函数访问类的私有(private)部分

c++ - 什么时候在 OOP 中使用友元是谨慎的?

c++ - 如何使用具有不同参数的函数作为函数参数

c++ - 摆脱 C++ 中令人讨厌的函数类型的可能方法?

c++ - 如何从字符串中查找子字符串?

c++ - 如何为 MinGW 项目设置 OpenCV?

c++ - 类模板上的关系运算符

c++ - 如何在 gtest 中使用带有命名空间的友元类