友元的作用
在c++中的类成员有三种权限分别是:
- public: 类内类外都可以访问
- private: 类内可以访问,类外不可以访问
- protected: 类内可以访问,类外不可以访问
因此friend的目的是类外也可以访问类内的private和protected成员。此外friend与权限无关,可以写在任意权限下面。
友元的实现方式
友元有三种实现方式:
- 全局函数做友元
- 类做友元
- 成员函数做友元
全局函数做友元
代码:
class GoodGay
{
friend void globalFunctionGoodGay(); // 全局函数做友元
public:
GoodGay()
{
pub_string = "pub_string";
pri_string = "pri_string";
pro_string = "pro_string";
}
string pub_string;
private:
string pri_string;
protected:
string pro_string;
};
void globalFunctionGoodGay()
{
GoodGay dark118;
cout << "访问公共" << dark118.pub_string << endl;
cout << "访问私有" << dark118.pri_string << endl;
cout << "访问保护" << dark118.pro_string << endl;
}
结果:
访问公共pub_string
访问私有pri_string
访问保护pro_string
请按任意键继续. . .
类做友元
类做友元和全局函数做友元相同。只需要在类GoodGay中加入一行代码即可
friend class classGoodGay;
classGoodGay的定义如下:
class classGoodGay
{
//一个类可以访问另一个类的私有成员
public:
GoodGay* good1;
classGoodGay()
{
good1 = new GoodGay;
}
void interview()
{
cout << "访问公共" << good1->pub_string << endl;
cout << "访问私有" << good1->pri_string << endl;
cout << "访问保护" << good1->pro_string << endl;
}
};
结果:
访问公共pub_string
访问私有pri_string
访问保护pro_string
请按任意键继续. . .
成员函数做友元
class GoodGay;
class membwerFunctionGoodGay
{
public:
GoodGay* good2;
membwerFunctionGoodGay();
void interview1();
};
class GoodGay
{
friend void membwerFunctionGoodGay::interview1();
public:
GoodGay()
{
pub_string = "pub_string";
pri_string = "pri_string";
pro_string = "pro_string";
}
string pub_string;
private:
string pri_string;
protected:
string pro_string;
};
membwerFunctionGoodGay::membwerFunctionGoodGay()
{
good2 = new GoodGay;
}
void membwerFunctionGoodGay::interview1()
{
cout << "访问公共" << good2->pub_string << endl;
cout << "访问私有" << good2->pri_string << endl;
cout << "访问保护" << good2->pro_string << endl;
}