本文概述
- C ++中的友元函数声明
- C ++友元函数示例
通过使用关键字Friend Compiler可以知道给定的函数是友元函数。
为了访问数据, 应该在类的主体内(以关键字friend为开头)声明friend函数。
C ++中的友元函数声明
class class_name
{
friend data_type function_name(argument/s);
// syntax of friend function.
};
在上面的声明中, friend函数的前面是关键字friend。可以像常规C ++函数一样在程序中的任何位置定义函数。函数定义不使用关键字friend或作用域解析运算符。
友元函数的特点:
- 该函数不在已声明为友元的类的范围内。
- 不能使用该对象来调用它, 因为它不在该类的范围内。
- 可以像普通函数一样调用它, 而无需使用该对象。
- 它不能直接访问成员名称, 而必须使用对象名称和点成员运算符作为成员名称。
- 可以在私有或公共部分中声明它。
#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;
}
输出:
Length of box: 10
让我们看一个简单的示例, 该函数对两个类友好。
#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;
}
输出:
10
在上面的示例中, 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;
}
输出:
value of x is : 5
【C++ Friend友元函数】在上面的示例中, 类B被声明为类A内的友元。因此, B是类A的友元。类B可以访问类A的私有成员。