4.4.1 全局函数做友元
友元目的:就是让一个函数或者类 访问另一个类中的私有成员
有缘关键字:friend
友元的三种实现
1、全局函数做友元
2、类做友元
3、成员函数做友元
#include <iostream>
using namespace std;
#include <string>
class Building
{
//goodGay 全局函数是 Building 好朋友,可以访问building私有成员变量
friend void goodGay(Building *building);
public:
Building()
{
m_sittingRoom = "客厅";
m_bedRoom = "卧室";
}
public:
string m_sittingRoom;
private:
string m_bedRoom;
};
//全局函数
void goodGay(Building *building)
{
cout << "好基友全局函数 正在访问 " << building->m_sittingRoom << endl;
cout << "好基友全局函数 正在访问 " << building->m_bedRoom << endl;
}
void test01()
{
Building b;
goodGay(&b);
}
int main()
{
test01();
system("pause");
return 0;
}
4.4.2 类做友元
#include <iostream>
using namespace std;
#include <string>
class Building;
class goodGay
{
public:
goodGay();
void visit(); //参观函数,访问Building中的属性
private:
Building *building;
};
class Building
{
public:
friend class goodGay;
public:
Building();
public:
string m_sittingRoom;
private:
string m_bedRoom;
};
//类外写成员函数
Building::Building()
{
m_sittingRoom = "客厅";
m_bedRoom = "卧室";
}
goodGay::goodGay()
{
//创建建筑物对象
building = new Building; // 堆区创建了一个building对象
}
void goodGay::visit()
{
cout << "访问building中成员 :" << building->m_sittingRoom << endl;
cout << "访问building中成员 :" << building->m_bedRoom << endl;
}
void test01()
{
goodGay g;
g.visit();
}
int main()
{
test01();
system("pause");
return 0;
}
4.4.3 成员函数做友元
#include <iostream>
using namespace std;
#include <string>
class Building;
class goodGay
{
public:
goodGay();
void visit(); //参观函数,访问Building中的私有属性
void visit2();// 不可以访问私有属性
private:
Building *building;
};
class Building
{
//告诉编译器 goodGay类下的visit成员函数作为本类的好朋友,可以访问私有成员
friend void goodGay::visit();
public:
Building();
public:
string m_sittingRoom;
private:
string m_bedRoom;
};
//类外写成员函数
Building::Building()
{
m_sittingRoom = "客厅";
m_bedRoom = "卧室";
}
goodGay::goodGay()
{
//创建建筑物对象
building = new Building; // 堆区创建了一个building对象
}
void goodGay::visit()
{
cout << "visit函数 访问building中成员 :" << building->m_sittingRoom << endl;
cout << "visit函数 访问building中成员 :" << building->m_bedRoom << endl;
}
void goodGay::visit2()
{
cout << "visit2函数 访问building中成员 :" << building->m_sittingRoom << endl;
//cout << "访问building中成员 :" << building->m_bedRoom << endl;
}
void test01()
{
goodGay g;
g.visit();
g.visit2();
}
int main()
{
test01();
system("pause");
return 0;
}