第七周任务二:使用成员函数、友元函数和一般函数的区别

* (程序头部注释开始)
*
程序的版权和版本声明部分
* Copyright (c) 2011,
烟台大学计算机学院学生
* All rights reserved.
*
文件名称:
*
者:吴瑕
*
完成日期: 2012 04 03
*
号:

*对任务及求解方法的描述部分
*
输入描述:
*
问题描述:完成求点类中距离的任务

#include <iostream>
#include <cmath>
using namespace std;
class CPoint 
{private: 
double x;  // 横座标
double y;  // 纵座标
public:
    CPoint(double xx=0,double yy=0):x(xx),y(yy){} 
//请继续写需要的代码
double getx(){return x;}

double gety(){return y;}

    void input();

double Distance1(CPoint p);//成员函数

friend double Distance2(CPoint &p);//友元函数
};

double Distance3(CPoint &p);//一般函数

void CPoint::input()  //以x,y 形式输入座标点 

char ch; 
cout<<"请输入座标点(格式x,y ):"; 
while(1) 

cin>>x>>ch>>y; 
if(ch != ',') 
{cout<<"输入格式不对";} 
else 
break; 



double CPoint::Distance1(CPoint p)//成员函数的实现,Distance1前加CPoint::
//直接访问私有数据成员,实质是this->x形式,this指针指向p的首地址

{
return (sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y))); 
}

double Distance2(CPoint &p)//友元函数的实现,Distance1前不加CPoint::,并不是类的成员函数
//不是类的成员函数,却可以p.hour的形式直接访问私有数据成员——友元

{
CPoint p1;
cout<<"请输入一个点:"; 
p1.input();

return(sqrt((p1.x-p.x)*(p1.x-p.x)+(p1.y-p.y)*(p1.y-p.y)));

}
double Distance3(CPoint &p)//一般函数的实现,Distance1前不加CPoint::
//只能用公共接口p.getx()形式访问私有数据成员

{
CPoint p1;
cout<<"请输入一个点:"; 
p1.input();

double a,b,c,d;
a=p1.getx();
b=p1.gety();
c=p.getx();
d=p.gety();

return (sqrt((a-c)*(a-c)+(b-d)*(b-d)));
}
int main()
{
double distance;

CPoint p(5,4);
CPoint p1(0,0);

distance=p.Distance1( p1); 
cout<<"两点间点的距离为:"<<distance<<endl;

distance=Distance2(p1);
cout<<"两点间点的距离为:"<<distance<<endl;

distance=Distance3(p1);
cout<<"两点间点的距离为:"<<distance<<endl;

system("pause");

return 0;


}


运行结果:

上机感言:

1.成员函数的实现,Distance1前加CPoint::
 直接访问私有数据成员,实质是this->x形式,this指针指向p的首地址
2.友元函数的实现,Distance1前不加CPoint::,并不是类的成员函数
 不是类的成员函数,却可以p.hour的形式直接访问私有数据成员——友元

3.一般函数的实现,Distance1前不加CPoint::
 只能用公共接口p.getx()形式访问私有数据成员

发布了54 篇原创文章 · 获赞 3 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章