# include <iostream>//求两点之间的距离
//这个cmath头文件,是为了兼容c语言中的math头文件,在C++中用cmath来表示
//很多其他的库也是这样用的.比如C语言中有ctype.h头文件,在C++中则用
//cctype表示
# include <cmath>
using namespace std;
class point//定义一个点类
{
public://共有接口
point(double xx, double yy)//构造函数
{
x=xx;
y=yy;
}
double getx(){return x;}
double gety(){return y;}
/*
本行是一个一个函数的头部,其中包含了该函数的类型信息。
函数名distance(即中文中的距离)函数有一个返回为double
类型的返回值,该函数需要接受一个point类对象的引用。并且
这个引用被修饰为const的,也就是说在调用函数的过程中,我们只能读出
p的成员,但是却不能写入。
*/
double distance(const point &p)
{
/*既然p是一个点类的对象,换句话说p也就是你所为这个函数传递的
实参的别名,它既然是一个点类的对象,自然也就有了相应的两个
数据成员。想要访问这个实参的x数据成员和y数据成员,这里通过了
逗号运算符实现访问数据成员的功能。
*/
x -= p.x;//等价于x = x - p.x;
y -= p.y;
return sqrt(x*x + y*y);//这里的是求两个点的距离公式。sqrt函数求平方根
}
private:
double x;
double y;
};
int main(void)
{
point A(1,2),B(3,4);
/*
cout是名字空间中的名字。因为在文件开头已经使用了using说明符
所以直接就可以使用,而endl是换行
而至于A.distance(B)这个估计也就是这个代码中的最值得需要理解的地方
而且,也挺难说的。
首先,很明显这个函数调用了距离函数,要求两个点(即A和B)的距离,
因此调用了distance函数。实参是B即p引用的对象。(换言之p就是B,
B就是P),而distance函数中的x和y即属于调用该函数的对象(A)中的数据
成员。
*/
cout<<A.distance(B)<<endl;
return 0;
}
/*
在VC++6.0中运行的结果为
==========================
2.82843
Press any key to continue
==========================
*/