C++友元函数

如果在C++中将函数定义为友元函数,那么可以使用该函数访问类的受保护和私有数据。

通过使用关键字friend,编译器知道给定的函数是一个友元函数。

为了访问数据,友元函数的声明应该在类的体内部进行,以关键字friend开头。

在C++中声明友元函数

 class class_name
{
friend data_type function_name(argument/s); // 友元函数的语法。 
 };

在上述声明中,友元函数之前有关键字friend。函数可以在程序中的任何地方定义,就像普通的C++函数一样。函数定义不使用关键字friend或作用域解析运算符。

友元函数的特点:

  • 该函数不在其声明为友元的类的作用域内。
  • 无法使用对象调用它,因为它不在该类的作用域内。
  • 它可以像普通函数一样被调用,而无需使用对象。
  • 它无法直接访问成员名称,必须使用对象名称和点成员运算符来访问成员名称。
  • 它可以在private或public部分中声明。

C++友元函数示例

让我们看一个简单的示例,使用C++友元函数打印一个箱子的长度。

#include <iostream>
using namespace std;
class Box
{
private:
int length;
public:
Box(): length(0) { }
friend int printLength(Box); // 友元函数
};
int printLength(Box b)
{
b.length += 10;
return b.length;
}
int main()
{
Box b;
cout<<"箱子的长度:"<< printLength(b)<<endl;
return 0;
}

输出:

箱子的长度:10 

让我们看一个简单的示例,当函数对两个类友好时。

#include <iostream>
using namespace std;
class B; // 前向声明。
class A
{
int x;
public:
void setdata(int i)
{
x=i;
}
friend void min(A,B); // 友元函数。
};
class B
{
int y;
public:
void setdata(int i)
{
y=i;
}
friend void min(A,B); // 友元函数。
};
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()函数对两个类(A和B)都是友好的,即min()函数可以访问类A和B的私有成员。

C++友元类

友元类可以访问它声明为友元的类中的私有和受保护成员。

让我们看一个友元类的简单示例。

#include <iostream>

using namespace std;

class A
{
int x =5;
friend class B; // 友元类。
};
class B
{
public:
void display(A &a)
{
cout<<"x的值是:"<<a.x;
}
};
int main()
{
A a;
B b;
b.display(a);
return 0;
}

输出:

x的值是:5 

在上面的示例中,类B在类A内部声明为友元类。因此,B是类A的友元。类B可以访问类A的私有成员。

标签: C++语言, C++语言教程, C++语言技术, C++语言学习, C++语言学习教程, C++语言下载, C++语言开发, C++语言入门教程, C++语言进阶教程, C++语言高级教程, C++语言笔试题, C++语言编程思想