友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数类授予它的友元函数特别的访问权。
定义格式:friend <返回类型> <函数名> (<参数列表>);
程序运行结果:

在friend.cc中定义了两个友元函数,从这两个函数中不难发现:一个类的友元函数可以访问该类的私有成员。其中重载的"<<"操作符必须定义为友元函数,因为输出流os对象会调用Student类中的私有成员。如果不定义为友元函数,则类外对象不能调用该类的私有成员。
定义格式:friend <返回类型> <函数名> (<参数列表>);
//friend.cc
#include <iostream>
#include <cstring>
using namespace std;
class Student
{
private:
int no;
char name[20];
public:
Student(int, const char*);
friend void print(const Student&);
friend ostream& operator<<(ostream&, const Student&);
};
Student::Student(int no, const char *name)
{
this->no = no;
//name是一个char类型的数组,故不能直接用stu.name = "hahaya"进行赋值
strcpy(this->name, name);
}
void print(const Student &stu)
{
cout << "学号:" << stu.no << "姓名:" << stu.name << endl;
}
ostream& operator<<(ostream &os, const Student &stu)
{
os << "学号:" << stu.no << "姓名:" << stu.name;
return os;
}
int main()
{
Student stu(1, "hahaya");
print(stu);
cout << stu << endl;
return 0;
}
程序运行结果:

在friend.cc中定义了两个友元函数,从这两个函数中不难发现:一个类的友元函数可以访问该类的私有成员。其中重载的"<<"操作符必须定义为友元函数,因为输出流os对象会调用Student类中的私有成员。如果不定义为友元函数,则类外对象不能调用该类的私有成员。