C++第六次实验-友元函数

本文介绍了一种使用C++编程语言实现计算二维平面上两点间距离的方法。通过定义一个CPoint类,分别展示了如何利用成员函数、友元函数以及一般函数来计算两点间的欧几里得距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、目标及代码:
/*  
* 文件名称:Test.cpp  
* 作    者:胡嘉威  
* 完成日期:2017 年 5 月 22 日  
* 版 本 号:v1.0  
* 对任务及求解方法的描述部分:分别利用成员函数、友元函数和一般函数求两点间距离的函数,并设计main()函数完成测试                                           
* 输入描述:无 
* 问题描述:分别利用成员函数、友元函数和一般函数求两点间距离的函数,并设计main()函数完成测试 
* 程序输出:
* 问题分析:主要要根据求解的步骤来定义不同的函数,然后不断调用函数进行运算 
* 算法设计:先分析简化计算步骤,再将较复杂、有一定重复的步骤用函数定义,在用到这些步骤的时候就只要调用函数就可以了 
*/   

#include <iostream>  
#include<cmath>
using namespace std;  
class CPoint    
{  
private:    
    double x;        // 定义横坐标    
    double y;       // 定义纵坐标    
public:   
    CPoint(double xx,double yy){x=xx;y=yy;}    
	double distance1(CPoint &c1);                      //display1是成员函数  
    friend double distance2(CPoint &c1,CPoint &c2);           //display2是友元函数  
    double getX(){return x;}  
    double getY(){return y;}                                                 
};  
double CPoint::distance1(CPoint &c1)  //成员函数display1的实现,dispaly1前加CPoint::  
{              
	double z;
	z=sqrt((x-c1.x)*(x-c1.x)+(y-c1.y)*(y-c1.y));
	cout<<"两点之间的距离为:"<<z<<endl;   //以x形式直接访问私有数据成员,实质是this->x形式  
	return z;
}  
double distance2(CPoint &c1,CPoint &c2)  //友元函数dispaly2的实现,不加CPoint::,友元并不是类的成员  
{  
	double z;
	z=sqrt((c1.x-c2.x)*(c1.x-c2.x)+(c1.y-c2.y)*(c1.y-c2.y));                    //虽然不是类的成员函数,却可以用d.x的形式直接访问私有数据成员——这就是友元  
   	cout<<"两点之间的距离为:"<<z<<endl;  
	return z;
}  
double distance3(CPoint &c1,CPoint &c2)  //display3是一般函数,dispaly3前不加CPoint::  
{  
	double z;
	z=sqrt((c1.getX()-c2.getX())*(c1.getX()-c2.getX())+(c1.getY()-c2.getY())*(c1.getY()-c2.getY()));                     
   	cout<<"两点之间的距离为:"<<z<<endl;  
    //不能直接访问,只能用公共接口t.getHour()形式访问私有数据成员    
	return z;
}  
int main()  
{  
    CPoint c1(10,11),c2(9,12);  
    c1.distance1(c2);  //成员函数这样调用:对象名.函数名()  
    distance2(c1,c2);   //友员函数的调用和一般函数无异(但实现中可以不同)  
    distance3(c1,c2);   //一般函数的调用  
    return 0;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值