友元函数是定义在类外的可以访问类内部的私有和保护成员的函数,友元函数类似打破了封装,本来外部无法直接访问的变量,函数,利用友元函数或者友元类(整个类中所有成员都是友元)可以进行访问。友元函数会在类中被声明,但是它不是成员函数。
友元的定义要使用friend。
class Book
{
int id;
public:
friend void printId(Book book);
};
void printId(Book book)
{
std::cout<<book.id<<std::endl;//这个函数可以访问类中任意成员
}
int main()
{
Book book;
printId(book);
return 0;
}
友元函数没有this指针,访问非全局变量或者静态成员的时候需要对象实例作为参数,友元函数使用的时候可以直接像普通函数一样进行调用。
友元类:
class Book
{
int id;
public:
friend void printId(Book book);
friend class OtherBook;//这是一个友元类,可以在这个类的内部对id进行访问
};