gpt4 book ai didi

c++ - 类变量以某种方式改变

转载 作者:行者123 更新时间:2023-11-30 02:27:18 25 4
gpt4 key购买 nike

我正在为类编写一些类,由于某种原因,在构造函数设置它们之后,我的私有(private)变量以某种方式发生了变化。在我的代码中,点的每个实例的 x、y 值都被保存为非常小的数字,根本不接近它们的真实值。当我在构造函数运行后计算出一些存储值时,这些值是正确的,但是当调用我的斜率或长度函数时,它们传递的值完全错误,导致长度为 0,斜率为“nan”。知道为什么会这样吗?

线段.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

线段.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;
}

最佳答案

您的 setter 设置本地 变量而不是设置类成员。

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

比如这里

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

当您打算(我想)设置类成员时,为什么要声明一个局部变量 Point endp1

关于c++ - 类变量以某种方式改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41864082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com