c++ - 使用来自自身 C++ 的变量

标签 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);
};

.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){

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

annanPunkt.getX() - x), 2) 

或者,this->xgetX()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/

相关文章:

c++ - 清除非字母字符的字符串

c++ - 如何在 C++ 中设置文件权限(跨平台)?

javascript - JavaScript 参数语法不正确

vba - 如何从另一个 Excel 实例引用工作簿

javascript - 将对象循环到另一个对象/数组中

c++ - 如何使用 cmake 脚本从命令行选择用于编译 C++ 代码的 xcode 版本

c++ - 当 json 值应为 INT 但作为字符串类型发送时 rapidjson 崩溃

python - 在列表上使用函数

function - 如何修复 Google 电子表格中的函数值?

类上的 C++ 容器,返回指针