一、什么是友元
在程序中,有些私有成员,也想让类外特殊的一些函数或者类进行访问,就需要用到友元技术。友元的目的就是让一个函数或者类访问另一个类中私有的成员。友元的关键字为 friend
。
二、全局函数做友元
新建一个 house.h 头文件,用来保存类的声明:
#pragma once
#include <iostream>using namespace std;class House
{// goodFriend()全局函数是House类的友元,可以访问House类的私有成员friend void goodFriend(House * house);
public:string living_room;private:string bedroom;public:House(void);
};
新建一个 house.cpp 源文件,用来实现构造方法和成员方法:
#include "house.h"using namespace std;House::House(void) : living_room("客厅"), bedroom("卧室") {}
在包含 main() 函数的文件中包含刚才定义的头文件,然后使用。
#include <iostream>
#include "house.cpp"using namespace std;// 全局函数
void goodFriend(House * house)
{cout << "好朋友正在访问你的:" << house->living_room << endl;cout << "好朋友正在访问你的:" << house->bedroom << endl;
}int main(void)
{House house;goodFriend(&house);return 0;
}
三、类做友元
新建一个 good_friend.h 头文件,用来保存类的声明:
#pragma once
#include <iostream>
#include "house.h"class House;class GoodFriend
{
public:void visit(House *house);
};
新建一个 good_friend.cpp 源文件,用来实现构造方法和成员方法:
#include "good_friend.h"using namespace std;void GoodFriend::visit(House *house)
{cout << "好朋友正在访问你的:" << house->living_room << endl;cout << "好朋友正在访问你的:" << house->bedroom << endl;
}
修改一个 house.h 头文件:
#pragma once
#include <iostream>using namespace std;class House
{// GoodFriend是House类的友元类,可以访问本类中私有成员friend class GoodFriend;
public:string living_room;private:string bedroom;public:House(void);
};
在包含 main() 函数的文件中包含刚才定义的头文件,然后使用。
#include <iostream>
#include "house.cpp"
#include "good_friend.cpp"using namespace std;int main(void)
{House house;GoodFriend good_friend;good_friend.visit(&house);return 0;
}
四、成员函数做友元
修改一个 house.h 头文件:
#pragma once
#include <iostream>
#include "good_friend.h"using namespace std;class House
{// GoodFriend类中的visit()函数是House类的友元函数,可以访问本类中私有成员friend void GoodFriend::visit(House *house);
public:string living_room;private:string bedroom;public:House(void);
};