Axe*_*dal 1 c++ function object this self
我正在尝试创建一个创建“点”并计算它们之间距离的小类。我首先创建两个“点”对象,然后将第二个作为参数传递给第一个点中包含的函数。这使我可以访问第二个点的坐标,但是我真的不知道我应该如何获得第一个点的坐标 - 接收第二个点作为参数的点。我认为它看起来像这样,但显然不是:
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);
};
Run Code Online (Sandbox Code Playgroud)
#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))
}
Run Code Online (Sandbox Code Playgroud)
首先,你已经声明distance为成员函数,所以它的定义需要在Punkt作用域内:
double Punkt::distance(Punkt annanPunkt){
Run Code Online (Sandbox Code Playgroud)
其次,您可能不需要参数的副本。传递const参考:
double Punkt::distance(const Punkt& annanPunkt){
Run Code Online (Sandbox Code Playgroud)
至于在函数中访问自己的数据成员,可以通过名称(x或y)访问它们:
annanPunkt.getX() - x), 2)
Run Code Online (Sandbox Code Playgroud)
另外,this->x,getX(),this->getX()等我发现使用this无处不在太冗长。
请注意,您需要制作吸气剂const:
int getX() const {return x;}
Run Code Online (Sandbox Code Playgroud)
或完全删除它们:如果您没有要维护的不变量,则使用公共数据成员可能是有意义的。
注意:我可能会创建distance一个非成员函数:
double distance(const Punkt& a, const Punkt& b);
Run Code Online (Sandbox Code Playgroud)