友元的三种实现
1.全局函数做友元
2.类做友元
3.成员函数做友元
全局函数做友元
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
//建筑物类
class Building
{
//goodGay全局函数是Building的好朋友,可以访问Building中的私有成员
friend void goodGay(Building* building);
public:
Building()
{
sittingroom = "客厅";
bedroom = "卧室";
}
public:
string sittingroom;//客厅
private:
string bedroom;//卧室
};
//全局函数
void goodGay(Building* building)
{
cout << "好基友全局函数 正在访问" << building->sittingroom << endl;
cout << "好基友全局函数 正在访问" << building->bedroom << endl;
}
void test01()
{
Building building;
goodGay(&building);
}
int main()
{
test01();
system("pause");
return 0;
}
类做友元(友元类)与类外写成员函数
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class Building
{
//类的友元
friend class GoodGay;
public:
Building();
public:
string settingroom;//客厅
private:
string bedroom;//卧室
};
class GoodGay
{
public:
GoodGay();
void visit();
private:
Building* building;
};
//成员函数类外写,在函数名前写 类名::
Building::Building()
{
settingroom = "客厅";
bedroom = "卧室";
}
GoodGay::GoodGay()
{
building = new Building;
}
void GoodGay::visit()
{
cout << "好基友正在访问:" << building->settingroom << endl;
cout << "好基友正在访问:" << building->bedroom << endl;
}
void test01()
{
GoodGay gg;
gg.visit();
}
int main()
{
test01();
system("pause");
return 0;
}
成员函数做友元
其实class A的作用不是告诉B有A类,而是告诉B有A这个数据类型,若是2中的情况,则需要在B前面整个定义完全的A类(个人理解)
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class Building;
class GoodGay
{
public:
GoodGay();
void visit();
void visit2();
private:
Building* building;//此处用到Building类,所以要在本类前声明有Building类
//c++中自动向上寻找
};
class Building
{
friend void GoodGay::visit();
public:
string sittingroom;
Building(); // 成员函数必须写在其所在类的后面,写在声明后也不行
private:
string bedroom;
};
GoodGay::GoodGay()
{
//因为此处用到Building,故虽然是GooGay类中的成员函数,也要放在Building类后面
building = new Building;
}
void GoodGay::visit()
{
cout << building->sittingroom << endl;
cout << building->bedroom << endl;
}
void GoodGay::visit2()
{
cout << building->sittingroom << endl;
}
Building::Building()
{
sittingroom = "keting";
bedroom = "woshi";
}
int main()
{
GoodGay gg;
gg.visit();
gg.visit2();
system("pause");
return 0;
}