目的:让一个函数或者类访问另一个类中的私有成员
全局函数做友元
#include <iostream>
#include <string>
using namespace std;
class Building
{
friend void GoodGay(Building& build); //全局函数作为友元,可以访问私有成员
private:
string m_Bedroom;
public:
string m_sittingroom;
Building()
{
m_Bedroom = "卧室";
m_sittingroom = "客厅";
}
};
void GoodGay(Building& build)
{
cout << "好基友正在访问:" << build.m_sittingroom << endl;
cout << "好基友正在访问:" << build.m_Bedroom << endl;
}
void test()
{
Building build;
GoodGay(build);
}
int main(void)
{
test();
system("pause");
return 0;
}
类做友元
#include <iostream>
#include <string>
using namespace std;
class Building
{
friend class GoodGay;//类做友元,GoodGay可以访问本类的私有属性
private:
string m_Bedroom;
public:
string m_sittingroom;
Building();
};
Building::Building()
{
m_Bedroom = "卧室";
m_sittingroom = "客厅";
}
class GoodGay
{
public:
void visit(); //访问building中的所有属性
Building* building;
GoodGay();
};
GoodGay::GoodGay()
{
building = new Building;
}
void GoodGay::visit()
{
cout << "好基友正在访问:" << building->m_sittingroom << endl;
cout << "好基友正在访问:" << building->m_Bedroom << endl;
}
void test()
{
GoodGay gg;
gg.visit();
}
int main(void)
{
test();
system("pause");
return 0;
}
类中的成员函数做友元
#include <iostream>
#include <string>
using namespace std;
class Building;
class GoodGay
{
public:
void visit(); //访问building中的私有成员
void visit2();//不可以访问building中的私有成员
Building* building;
GoodGay();
};
class Building
{
friend void GoodGay::visit(); //GoodGay下的visit可以访问本类的私有成员
private:
string m_Bedroom;
public:
string m_sittingroom;
Building();
};
Building::Building()
{
m_Bedroom = "卧室";
m_sittingroom = "客厅";
}
GoodGay::GoodGay()
{
building = new Building;
}
void GoodGay::visit()
{
cout << "好基友正在访问:" << building->m_sittingroom << endl;
cout << "好基友正在访问:" << building->m_Bedroom << endl;
}
void GoodGay::visit2()
{
cout << "好基友正在访问:" << building->m_sittingroom << endl;
}
void test()
{
GoodGay gg;
gg.visit();
gg.visit2();
}
int main(void)
{
test();
system("pause");
return 0;
}
推荐文章:[C++核心编程](四):类和对象——对象特性