1、全局函数做友元
#include<iostream>
using namespace std;
class Building
{
//goodguy全局函数是Building好朋友,可以访问Building里的私有成员
//friend + 函数声明;
friend void goodguy(Building* building);
public:
Building()
{
m_Bedroom = "卧室";
m_Settingroom = "客厅";
}
public:
string m_Settingroom;
private:
string m_Bedroom;
};
//全局函数
void goodguy(Building *building)
{
cout << "你的好基友正在 访问:" << building->m_Settingroom << endl;
cout << "你的好基友正在 访问:" << building->m_Bedroom << endl;
}
void test()
{
Building building;
goodguy(&building);
}
int main()
{
test();
return 0;
}
2、类做友元
#include<iostream>
using namespace std;
class Building;
class Goodguy
{
public:
Goodguy();
void visit();
Building* building;
};
class Building
{
//Goodguy类是本类的好朋友,可以访问本类的私有成员
friend class Goodguy;
public:
Building();
string m_Settingroom;
private:
string m_Bedroom;
};
Goodguy::Goodguy()
{
building = new Building;
}
Building::Building()
{
m_Settingroom = "客厅";
m_Bedroom = "卧室";
}
void Goodguy::visit()
{
cout << "你的好基友正在访问:" << building->m_Settingroom << endl;
cout << "你的好基友正在访问:" << building->m_Bedroom << endl;
}
void test()
{
Goodguy gg;
gg.visit();
}
int main()
{
test();
return 0;
}
3、成员函数做友元
#include<iostream>
using namespace std;
class Building;
class Goodguy
{
public:
Goodguy();
void visit();//让visit函数可以访问Building中的私有成员
void visit02(); //让visit02函数不可以访问Building中的私有成员
Building* building;
};
class Building
{
//告诉编译器 Goodguy类下的全局函数,不然编译器会以为是全局函数,因为visit在全局区定义
friend void Goodguy::visit();
public:
Building();
string m_Settingroom;
private:
string m_Bedroom;
};
Goodguy::Goodguy()
{
building = new Building;
}
Building::Building()
{
m_Settingroom = "客厅";
m_Bedroom = "卧室";
}
void Goodguy::visit()
{
cout << "visit好基友正在访问:" << building->m_Settingroom << endl;
cout << "visit好基友正在访问:" << building->m_Bedroom << endl;
}
void Goodguy::visit02()
{
cout << "visit02好基友正在访问:" << building->m_Settingroom << endl;
//cout << "visit02好基友正在访问:" << building->m_Bedroom << endl;
}
void test()
{
Goodguy gg;
gg.visit();
gg.visit02();
}
int main()
{
test();
return 0;
}