友元类与友元函数
友元函数
在 C++ 中,类 的私有成员(private)和只能在本类中访问,类的保护成员(protected)只能在本类或者子类中访问,但类的友元函数可以访问类的私有成员和保护成员。
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是 成员函数。
定义 使用 friend 修饰的函数,称为友元函数。 语法 class ClassName{ public: friend void func(); }; void func(){ } 使用 friend 定义了一个友元函数 func。
案例
class Student{ public: friend void printName(Student stu); //友元函数 Student(string name, int age){ this->name = name; this->age = age; } private: string name; int age; }; //非成员函数 void printName(Student stu){ cout <<stu.name << endl; //不报错 } int main(){ Student s1("zs",20); printName(s1); return 0; }
友元类
定义 使用 friend 修饰的类,称为友元类。 语法 class ClassName{ public: friend class ClassName2; }; class ClassName2{ }; 使用 friend 定义了一个友元类 ClassName2,此时 ClassName2 就可以访问类的所有的私有成员
案例
class Teacher; class Student{ private: string name ="王五"; int age; public: void stu_print(Teacher &t); }; class Teacher{ private: string name="张三"; int age; public: friend class Student; //友元类 }; void Student::stu_print(Teacher &t){ cout << this->name <<endl; cout << t.name <<endl; } int main(){ Student s1; Teacher t1; s1.stu_print(t1); return 0; }