友元
目的:让一个函数或者类访问另一个类中私有成员
用全局函数作为友元
先在类中用friend关键字声明友元函数
class Buliding
{
friend void visit(Buliding& b1);
public:
string living_room;
Buliding()
{
living_room = "客厅";
bedroom = "卧室";
}
private:
string bedroom;
};
对应的函数就可以访问私有变量
void visit(Buliding &b1)
{
cout << "正在访问:" << b1.living_room << endl;
cout << "正在访问:" << b1.bedroom << endl;
}
友元类
#include <iostream>
#include<string>
using namespace std;
class Buliding
{
public:
string living_room;
Buliding();
private:
string bedroom;
};
class goodfriend
{
public:
void visit();//访问Buliding中的属性
goodfriend();
Buliding* buliding;
};
//类外写成员函数
Buliding::Buliding()
{
living_room = "客厅";
bedroom = "卧室";
}
goodfriend::goodfriend()
{
//创造建筑物对象
buliding = new Buliding;//new 会在堆区,
//如果不new就会在栈区,用完会释放
}
void goodfriend::visit()
{
cout << "正在访问:" << buliding->living_room << endl;
}
void test()
{
goodfriend g;
g.visit();
}
int main()
{
test();
system("pause");
}
程序流程:
先创建一个goodfriend的对象,同时运行goodfriend的构造函数,goodfriend的构造函数中会创建Buliding对象,同时运行Buliding的构造函数,给Buliding的属性赋值,然后运行visit()访问。
友元类的实现
class Buliding
{
friend class goodfriend;
public:
string living_room;
Buliding();
private:
string bedroom;
};
这个友元类中的所有函数都可以访问原类的所有属性
成员函数做友元
让某个类中的个别成员函数访问原类的所有属性
friend void goodfriend::visit();