在一个类中,如果函数在不同的说明符中被声明为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);
答案 0 :(得分:5)
不,没关系。
C ++标准,第11.3 / 9节[friend.class]
无论朋友是谁,朋友声明的含义都是一样的 声明出现在私人,受保护或公开(9.2)部分 类成员规范。
注意:强>
在类中声明的静态函数仍然是类成员。朋友的功能不是。