使用来自自我 C++ 的变量

Axe*_*dal 1 c++ function object this self

我正在尝试创建一个创建“点”并计算它们之间距离的小类。我首先创建两个“点”对象,然后将第二个作为参数传递给第一个点中包含的函数。这使我可以访问第二个点的坐标,但是我真的不知道我应该如何获得第一个点的坐标 - 接收第二个点作为参数的点。我认为它看起来像这样,但显然不是:

。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);
};
Run Code Online (Sandbox Code Playgroud)

.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))
    }
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 5

首先,你已经声明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)

至于在函数中访问自己的数据成员,可以通过名称(xy)访问它们:

annanPunkt.getX() - x), 2) 
Run Code Online (Sandbox Code Playgroud)

另外,this->xgetX()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)