1、作用
让不属于类中的函数能直接调用某类的函数或变量(包括private)。
2、友元函数分类
2.1全局函数做友元
全局函数原型(包含想调用的类):
void any_func(Quick_func& qf);
返回类型 函数名(类名 &类对象名)
类中必须加入的友元声明:
friend void any_func(Quick_func& qf);//public和private部分均可
示例:
class Quick_func
{
private:
int x = 3;
int len;
char* str;
static int num_length;
public:
Quick_func(){ cout << "begin" << endl; }
~Quick_func(){ cout << "end" << endl; }
int any_value = 34;
friend void any_func(Quick_func& qf);
};
//类和函数定义最好分开放,不然可能导致重定义
void any_func(Quick_func& qf) {
cout << qf.x << endl;
}
2.2类做友元
必须在被作为友元的类中加入(定义完友元类的情况下):
friend class 友元类名
示例:
class Quick_func
{
friend class Any_cls;
private:
int x = 3;
int len = 34;
char* str;
static int num_length;
public:
Quick_func(){ cout << "begin" << endl; }
~Quick_func(){ cout << "end" << endl; }
};
友元类定义及调用:
class Any_cls
{
public:
Any_cls() {};
~Any_cls() {};
Quick_func *qf
void get_qf_inf() {
cout << qf->len << endl;
}
};
注意:对上述示例来说,反过来在Quick_func类中调用Ang_cls的函数或变量是不行的,需要在Any_cls中也声明友元类。
2.3成员函数做友元
在一类中将另一类的某一成员函数作为友元,可以让其访问其private信息。
格式:
friend 返回类型 类名::函数名(char *args);
示例:
friend void Any_cls::get_qf_inf1();