📅  最后修改于: 2020-10-16 07:02:00             🧑  作者: Mango
如果将函数定义为C++中的友好函数,则可以使用函数访问类的受保护数据和私有数据。
通过使用关键字Friend Compiler可以知道给定的函数是一个Friend函数。
为了访问数据,应该在类的主体内(以关键字friend为开头)声明friend函数。
class class_name
{
friend data_type function_name(argument/s); // syntax of friend function.
};
在上面的声明中,friend函数的前面是关键字friend。该函数可以在任何地方在像一个普通的C++函数的程序来定义。函数定义既不使用关键字friend也不是范围解析运算符。
朋友函数的特点:
让我们看一下用于print盒子长度的C++朋友函数的简单示例。
#include
using namespace std;
class Box
{
private:
int length;
public:
Box(): length(0) { }
friend int printLength(Box); //friend function
};
int printLength(Box b)
{
b.length += 10;
return b.length;
}
int main()
{
Box b;
cout<<"Length of box: "<< printLength(b)<
输出:
Length of box: 10
让我们看一个简单的示例,该函数对两个类友好。
#include
using namespace std;
class B; // forward declarartion.
class A
{
int x;
public:
void setdata(int i)
{
x=i;
}
friend void min(A,B); // friend function.
};
class B
{
int y;
public:
void setdata(int i)
{
y=i;
}
friend void min(A,B); // friend function
};
void min(A a,B b)
{
if(a.x<=b.y)
std::cout << a.x << std::endl;
else
std::cout << b.y << std::endl;
}
int main()
{
A a;
B b;
a.setdata(10);
b.setdata(20);
min(a,b);
return 0;
}
输出:
10
在上面的示例中,min()函数对两个类友好,即,min()函数可以访问类A和B的私有成员。
朋友类可以访问已声明为朋友的类的私有成员和受保护成员。
让我们看一个朋友类的简单例子。
#include
using namespace std;
class A
{
int x =5;
friend class B; // friend class.
};
class B
{
public:
void display(A &a)
{
cout<<"value of x is : "<
输出:
value of x is : 5
在上面的示例中,类B被声明为类A内的朋友。因此,类B是类A的朋友。类B可以访问类A的私有成员。