我正在为类编写一些类,并且由于某种原因,我的私有变量在构造函数设置后以某种方式发生了变化。在我的代码中,每个点实例的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;
}
答案 0 :(得分:3)
您的setter设置了 local 变量,而不是设置类成员。
由于某种原因,您在setter方法中声明了与类成员同名的局部变量。局部变量隐藏类成员。您执行的所有修改都会修改这些局部变量,而不会触及类成员。
例如,这里
void LineSegment::setEnd1(Point p1)
{
Point endp1 = p1;
}
为什么你在意图(我想)设置类成员时声明一个局部变量Point endp1
?