问题:C++友元函数的最简单案例
本程序通过VC++ 6.0编译与测试,程序的目的是求两个点之间的中点坐标,具体代码如下:
//没有使用友元类,报错,错误分析见代码注释
#include <iostream>
using namespace std;
class Point
{
public:
Point(float a,float b):x(a),y(b){}
void print()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
private:
float x;
float y;
};
//写一个函数求两个点的中点
Point middle(const Point &p1,const Point &p2)
{
Point middleP((p1.x+p2.x)/2,(p1.y+p2.y)/2);
//错误处,由于x,y为私有变量,显然不可以通过p1.x的方式获取
//程序显然会报错
//这里可以采用get的方式来获取,当然会麻烦一点
//简单一点的方法就是使用友元函数
return middleP;
}
int main()
{
Point p(0,0);
Point q(1,1);
middle(p,q).print();
return 0;
}
未使用友元函数时程序编译出错,具体提示如图:
//使用友元函数后,程序可以正确输出运行结果
#include <iostream>
using namespace std;
class Point
{
public:
friend Point middle(const Point &p1,const Point &p2);//声明友元函数
Point(float a,float b):x(a),y(b){}
void print()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
private:
float x;
float y;
};
//写一个函数求两个点的中点
Point middle(const Point &p1,const Point &p2)
{
Point middleP((p1.x+p2.x)/2,(p1.y+p2.y)/2);//使用友元函数后可以获取private变量
return middleP;
}
int main()
{
Point p(0,0);
Point q(1,1);
middle(p,q).print();
return 0;
}
程序运行结果如下: