友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,当然友元也可以是类内的一个方法。友元可以访问类内所有(private)成员和保护(protected)成员。
友元函数
如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示:
class Box
{
double width;
public:
double length;
friend void printWidth( Box box );
void setWidth( double wid );
};
友元类
#include <iostream>
using namespace std;
class one{
friend class two;
private:
int demo;
int demo2;
};
class two{
public:
void setone(one x);
};
void two::setone(one x)
{
x.demo=10;
x.demo2=100;
printf("%d %d\n",x.demo,x.demo2);
}
int main(void)
{
one a;
two b;
b.setone(a);
return 0;
}
当将一个类作为友元时,可直接将该类声明在另一个类内。若不声明,编译将会报错。
友元类方法
#include <iostream>
using namespace std;
class one;
class two{
public:
void setone(one x);
};
class one
{
friend void two::setone(one x);
private:
int demo;
int demo2;
};
void two::setone(one x)
{
x.demo=10;
x.demo2=100;
printf("%d %d\n",x.demo,x.demo2);
}
int main(void)
{
one a;
two b;
b.setone(a);
return 0;
}