类的友元函数是定义在类外部,可以访问类的私有成员和保护成员。尽管友元函数在原有类定义出现过。但是友元函数不属于成员函数。
#include <iostream>
using namespace std;
class Box
{
private:
double width;
double length;
public:
Box():width(10.0),length(20.0){}
friend void printWidth(Box box);
void setWidth(double wid);
};
void Box::setWidth(double wid)
{
width = wid;
}
void printWidth(Box box)
{
cout<<box.width<<endl;
}
#include <iostream>
#include "extern.h"
using namespace std;
int main()
{
Box box;
box.setWidth(10.0);
printWidth(box);
return 0;
}
因为友元函数没有this指针,访问非静态成员的时候需要对象做参数。访问静态成员的时候则不需要对象做参数。
可以直接调用友元函数,不需要通过对象或者指针。