友元函数、成员,友元类,以及实例(C++)

  • Post author:
  • Post category:其他


友元分为友元函数、友元成员和友元类三种,友元声明可以放在类的公有、私有或保护,结果都一样的。



一.友元函数

友元函数是一种说明在类定义体内的非成员函数。说明友元函数的方法如下:


friend 返回值类型 函数名(参数表)


说明:

  1. 友元函数是在类中说明的一个函数,不是该类的成员函数,但允许访问该类的所有成员。它是独立于任何类的一般外界函数。
  2. 由于友元函数不是类的成员,所以没有this指针,访问该类的对象成员时,必须使用对象名。
  3. 虽然友元函数是在类中说明的,但其名字的作用域在类外,作用域的开始点在说明点,作用域的结束点和类名相同。
  4. 在类外定义友元函数时,去点friend关键字。



二.友元成员

另一个类的成员函数可以作为某个类的友元,只是在声明友元函数时要加上成员函数所在的类名,

称为友元成员。


声明如下:


friend 类名::成员函数名(形参列表)



三.友元类


某一个类可以是另一个类的友元,这样作为友元类中的所有成员函数都可以访问另一个类中的私有成员。


说明方式如下:


friend class 类名;



例题

设计一个JX类表示矩形,矩形的长和宽作为其两个数据成员。编写一个求矩形面积的函数area(),并将它声明为JX的一个友元函数。利用area()求出该矩形的面积。

运行结果如下:

在这里插入图片描述

代码如下:

#include<iostream>
using namespace std;
class JX
{
friend int area(JX j);
public:
JX(int a,int b)
{
this->x=a;
this->y=b;
}
void print()
{
cout<<"length:"<<this->x<<endl;
cout<<"width:"<<this->y<<endl;
}
int x,y;
};
int area(JX j)
{
int a,b;
a=j.x;
b=j.y;
return a*b;
}
int main()
{
JX j(12,5);
j.print();
int i;
i=area(j);
cout<<"area:"<<i<<endl;
return 0;
}



版权声明:本文为Yangye_1018原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。