这个东西不太重要,有个印象就行。
首先需要明确的是,在类中声明成员或方法的时候,如果没写访问权限,那就默认是private的:
class Student { int age; // private的成员 public: int id; // public的成员 }
使用friend关键字,可以修饰三个东西:
① 某一个函数
class Student { private: int age; friend void good_friend(Student& s); // 允许外部方法good_friend访问私有属性 }; void good_friend(Student& t) { cout << t.age << endl; // 由于该函数是friend,则可以访问age,否则不行。 }
② 某一个类
class Teacher; class Student { private: int age; friend class Teacher; // 允许Teacher类访问私有属性 }; class Teacher { public: void ask(Student& s) { cout << s.age << endl; // 由于Teacher类被Student类friend修饰了,故可以访问age,否则不行。 } }
③ 类中的某个函数
class Teacher; class Student { public: void ask(Teacher& t); } class Teacher { private: int age; friend void Student::ask(Teacher& t); // 允许Student类下的ask方法访问私有属性 } void Student::ask(Teacher& t) { cout << t.age << endl; // 由于Teacher类允许这个方法访问私有属性了,故可以,否则不行。 }