类变量以某种方式发生了变化

时间:2017-01-26 00:19:39

标签: c++ class variables

我正在为类编写一些类,并且由于某种原因,我的私有变量在构造函数设置后以某种方式发生了变化。在我的代码中,每个点实例的x,y值都被保存为非常小的数字,这些数字与它们实际上完全不同。当我在构造函数运行后输出一些存储的值时,值是正确的但是当调用我的斜率或长度函数时,它们会传递完全错误的值,导致长度为0,并且" nan"对于斜坡。知道为什么会这样吗?

LineSegment.hpp

#include "Point.hpp"

#ifndef LineSegment_hpp
#define LineSegment_hpp

class LineSegment
{
private:
    Point endp1;
    Point endp2;

    double x_1;
    double x_2;
    double y_1;
    double y_2;

public:
    LineSegment(Point p1, Point p2);
    //SET-METHODS
    void setEnd1(Point p1);
    void setEnd2(Point p2);

    //get-methods
    Point getEnd1();
    Point getEnd2();

    //calculations
    double slope();
    double length();
};
#endif

LineSegment.cpp

  #include "LineSegment.hpp"
    LineSegment::LineSegment(Point p1, Point p2)
    {
        double x_1 = p1.getXCoord();
        double y_1 = p1.getYCoord();
        setEnd1(p1);

        double y_2 = p2.getYCoord();
        double x_2 = p2.getXCoord();
        setEnd1(p2);
    }

//set functions
void LineSegment::setEnd1(Point p1)
{
    Point endp1 =  p1;
}

void LineSegment::setEnd2(Point p2)
{
    Point endp2 =  p2;
}

//get-methods
Point LineSegment:: getEnd1()
{
    return endp1;
}

Point LineSegment:: getEnd2()
{
    return endp2;
}

//calculations

double LineSegment::slope()
{
    return (y_2-y_1)/(x_2-x_1);
}

double LineSegment::length()
{
    return endp1.distanceTo(endp2);
}

Main.cpp的

#include "Point.hpp"
#include "LineSegment.hpp"
#include <iostream>

int main()
{
    Point p1(-1.5, 0.0);
    Point p2(1.5, 4.0);
    double dist = p1.distanceTo(p2);

    LineSegment ls1(p1, p2);

    double length = ls1.length();
    std::cout << length << std::endl;
    double slope = ls1.slope();
    std::cout << slope << std::endl;
}

1 个答案:

答案 0 :(得分:3)

您的setter设置了 local 变量,而不是设置类成员。

由于某种原因,您在setter方法中声明了与类成员同名的局部变量。局部变量隐藏类成员。您执行的所有修改都会修改这些局部变量,而不会触及类成员。

例如,这里

void LineSegment::setEnd1(Point p1)
{
    Point endp1 = p1;
}

为什么你在意图(我想)设置类成员时声明一个局部变量Point endp1