c++友元类
1、全局函数作为友元。
当全局函数作为友元,这个函数可以访问 朋友类中的私有属性和私有函数。
需要在该类中申明。不需要声明为公开。
class Student{
//声明test05方法是Student类的友元,好朋友
friend void test05();
public:
Student(string name, int id);//构造函数
private:
string name;
int id;
}
函数实现:
void test05() {//引用传入
Student stu("小红",16);
cout << stu.id << endl;
cout << stu.name << endl;
}
2、友元类
在另一个类中可以访问本类的私有属性和私有的函数
需要在本类中申明 朋友类
class Student{
//说明类Teacher是本类的朋友,可以访问本类的私有属性
friend class Teacher;
public:
Student(string name, int id);//构造函数
private:
string name;
int id;
}
领一个类如何调用:
class Teacher {
public:
Teacher();
Student* st;
void visit();
void visit2();
};
//构造函数默认初始化
Teacher::Teacher(){
st = new Student("小明", 4);
}
void Teacher::visit() {
cout << "visit 访问了:" << st->name << endl;
cout << "visit 访问了:" << st->id << endl;
}
3、友元成员函数
另一个类中的一个函数,可以访问本类中的私有属性。
使用时,要先在另一个类中创建本类对象,但创建时要先在类外的上面,先声明有这个类存在,否则会报错
class Student;
class Teacher {
public:
Teacher();
Student* st;
void visit();
void visit2();
};
//构造函数默认初始化
Teacher::Teacher(){
st = new Student("小明", 4);
}
void Teacher::visit() {
cout << "visit 访问了:" << st->name << endl;
cout << "visit 访问了:" << st->id << endl;
}
上面是在友元类的操作
在本类中,需要对朋友函数进行声明。
并且本类和友元函数所在的类要在同一个文件内,友元类要在本类上面。否则本类中的声明找不到是哪一个类。
class Student
{
//说明Teacher 类 作用域里的visit()函数,是本类的朋友,可以访问本类里的私有属性
friend void Teacher::visit();
private:
string name;
int id;
};
排布结构:
//先声明本类,因为需要在友元函数所在的类中构造本类
class Student;
//然后需要声明友元函数所在的类
class Teacher {
······
}
//然后声明本函数,以为在本函数中有Teacher类作用域,所以需要先声明Teacher
class Student
{
······
};