我正在尝试创建一个创建“点”并计算它们之间距离的小类。我首先创建两个“点”对象,然后将第二个作为参数传递给包含在第一个点中的函数。这使我可以访问第二个点的坐标,但是我真的不知道我应该如何获得第一个点的坐标——第一个点接收第二个点作为参数。我认为它看起来像这样,但显然不是:
.h
class Punkt{ //"Punkt" = swedish for "dot"
private:
int x, y;
public:
//Konstruktor
Punkt(int firstX, int firstY): x(firstX), y(firstY){};
//Setters and getters
int getX(){return x;}
void setX(int newX){x = newX;}
int getY(){return y;}
void setY(int newY){y = newY;}
//Avstånd till annan punkt
double distance(Punkt annanPunkt);
};
.cpp
#include "punkt.h"
#include <cmath>
double distance(Punkt annanPunkt){ //"annanpunkt" = "other dot"
return sqrt(pow((annanPunkt.getX() - self.getX), 2) +
pow((annanPunkt.getY() - self.getY, 2))
}
最佳答案
首先,你已经将distance
声明为一个成员函数,所以它的定义需要在Punkt
范围内:
double Punkt::distance(Punkt annanPunkt){
其次,您可能不需要参数的拷贝。传递一个 const
引用:
double Punkt::distance(const Punkt& annanPunkt){
至于在函数中访问自己的数据成员,可以通过名称(x
或y
)访问:
annanPunkt.getX() - x), 2)
或者,this->x
、getX()
、this->getX()
等。我发现使用 this
到处都太冗长了。
请注意,您需要将 getters const
设置为 const
:
int getX() const {return x;}
或完全删除它们:如果您没有要维护的不变量,使用公共(public)数据成员可能是有意义的。
注意:我可能会将 distance
设为非成员函数:
double distance(const Punkt& a, const Punkt& b);
关于c++ - 使用来自自身 C++ 的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22458827/