这个东西不太重要,有个印象就行。
首先需要明确的是,在类中声明成员或方法的时候,如果没写访问权限,那就默认是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类允许这个方法访问私有属性了,故可以,否则不行。
}