C++ Friend
如果在C++中将函数定义为朋友函数,则可以使用该函数访问类的受保护数据和私有数据。
通过使用关键字friends编译器知道给定的函数是一个朋友函数。
对于访问数据,应该在以关键字friend开头的类的内部声明Friend函数。
在C++中声明friend功能
class class_name
{
friend data_type function_name(argument/s); // syntax of friend function.
};
在上面的声明中,friend函数之前带有关键字friend。可以像常规C++函数一样在程序中的任何位置定义函数。函数定义不使用关键字 friend或范围解析运算符。
Friend函数的特征:
该函数不在其声明为friend的类的范围内。
不能使用对象来调用它,因为它不在该类的范围之内。
可以像普通函数一样调用它,而无需使用该对象。
它不能直接访问成员名称,而必须使用对象名称和点成员运算符作为成员名称。
可以在私有或公共部分声明它。
C++朋友函数示例
让我们看一下用于打印盒子长度的C++朋友函数的简单示例。
#include <iostream>
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)<<endl;
return 0;
}
输出:
让我们看一下该函数对两个类友好的简单示例。
#include <iostream>
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;
}
输出:
在上面的示例中,min()函数对两个类友好,即min()函数可以访问类A和B的私有成员。
C++朋友类
朋友类可以访问已声明为朋友的类的私有成员和受保护成员。
让我们看一个简单的例子。朋友班。
#include <iostream>
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 : "<<a.x;
}
};
int main()
{
A a;
B b;
b.display(a);
return 0;
}
输出:
在上面的示例中,类B被声明为类A内的朋友。因此,B是类A的朋友。类B可以访问类A的私有成员。