让不属于类中的函数能直接调用某类的函数或变量(包括private)。
全局函数原型(包含想调用的类):
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;
- }
必须在被作为友元的类中加入(定义完友元类的情况下):
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中也声明友元类。
在一类中将另一类的某一成员函数作为友元,可以让其访问其private信息。
格式:
friend 返回类型 类名::函数名(char *args);
示例:
friend void Any_cls::get_qf_inf1();