尽管公式编码正确,但 Point 类中的距离函数未返回正确的值
Posted
技术标签:
【中文标题】尽管公式编码正确,但 Point 类中的距离函数未返回正确的值【英文标题】:Distance function in Point class is not returning the correct value despite the formula being coded properly 【发布时间】:2020-07-04 17:13:10 【问题描述】:#include <iostream>
#include <string>
#include <math.h>
using namespace std;
class Point
int x,y;
public:
Point()
x=0;
y=0;
Point(int a, int b)
a=1;
b=1;
Point(const Point &a)
x=a.x;
y=a.y;
void setvalues(int a, int b)
x=a;
y=b;
int getvalueX()
return x;
int getvalueY()
return y;
double distance(const Point &a,const Point &b)
int x1=a.x,x2=b.x,y1=a.y,y2=b.y;
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
;
int main()
Point pointA;
Point pointB;
pointA.setvalues(9,7);
pointB.setvalues(3,2);
cout<<pointA.getvalueX()<<","<<pointA.getvalueY()<<endl<<pointB.getvalueX()<<","<<pointB.getvalueY()<<endl<<distance(&pointA,&pointB);
return 0;
我在另一个程序中使用了这个公式,它工作得很好。我是 C++ 新手,所以我猜我只是编码错误。 忽略其余部分,它一直告诉我我需要添加更多详细信息才能发布此问题。烦人。
【问题讨论】:
这就是你don't useusing namespace std
的原因。您在两个指针上调用std::distance
,而不是您自己的函数,该函数是该类的成员并采用引用而不是指针。
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
- 请不要这样写。将其分解为更小的组件。
@Jesper 看起来很时尚。那行对我来说是完全可读的。可以根据我的口味使用更多的水平空白,但勾股定理很容易识别。
@JohnFilleau -- 也许它看起来可读,因为距离公式是众所周知的。如果它是一个更晦涩的公式,它可能看起来不那么可读。
【参考方案1】:
您可以将distance
设为静态成员函数。这样您就可以访问私有元素,并且不需要对象来调用该方法。
static double distance(const Point &a,const Point &b)
int x1=a.x,x2=b.x,y1=a.y,y2=b.y;
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
您可以将其设为好友功能
friend double distance(const Point &a,const Point &b)
int x1=a.x,x2=b.x,y1=a.y,y2=b.y;
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
【讨论】:
【参考方案2】:由于您将distance()
声明为Point
的成员函数,因此您必须将其作为Point
的成员函数调用。
你的代码
cout << distance(pointA, pointB);
不会起作用,因为它忽略了distance
必须作为成员函数调用的事实。要解决此问题,请将输出语句更改为
cout << pointA.distance(pointA, pointB) << endl;
注意:正如 @cigien
在 cmets 中所述,实现 distance
函数的更好方法是使其成为非成员函数
double distance(Point a, Point b)
return something;
或者让它成为只有一个参数的成员函数:
struct Point
double x, y;
double distance_to(Point b)
return something;
【讨论】:
必须是友元函数或静态成员函数才能访问私有元素。 明确地说,我正在编写此代码作为大学作业,我们还没有谈到朋友函数的主题,所以我将不得不使用静态成员函数,但我没有老实说,我不知道该怎么做。你能给我一些示例代码吗?以上是关于尽管公式编码正确,但 Point 类中的距离函数未返回正确的值的主要内容,如果未能解决你的问题,请参考以下文章