C++友元函数的最简单案例

问题: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;
}

程序运行结果如下:

 


 

 

全部评论

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务