C++ 重载+运算符的奇怪行为

C++ 重载+运算符的奇怪行为,c++,operator-overloading,C++,Operator Overloading,我创建了一个表示Linia aX+bY=c行的类,并重载了+运算符,所以现在它返回新的Linia对象,该对象具有c=c+b/参数。但问题是,当我使用这个操作符时,给定直线对象的所有字段都变为0 #include <iostream> using namespace std; struct Q{ public: double x,y; Q(double x, double y){ this->x = x; this->y =

我创建了一个表示Linia aX+bY=c行的类,并重载了+运算符,所以现在它返回新的Linia对象,该对象具有c=c+b/参数。但问题是,当我使用这个操作符时,给定直线对象的所有字段都变为0

   #include <iostream>

using namespace std;
struct Q{
public:
double x,y;
    Q(double x, double y){
        this->x = x;
        this->y = y;
    }
     friend ostream& operator<< (ostream &wyjscie, Q const& ex){
        wyjscie<<"("<<ex.x<<","<<ex.y<<")";
        return wyjscie;
     }

};
class Linia{
public:
    double a,b,c;
    Linia (double a, double b, double c){
        this->a = a;
        this->b = b;
        this->c = c;
    }
    Linia operator+ (double i){
       return Linia(a, b, c + i/b);
    }
      Linia operator- (double i){
       return Linia(a, b, c - i/b);
    }
    Q operator* (const Linia& i){
        double w = a*i.b - b*i.a;
        double wx = -c*i.b + i.c*b;
        double wy = a*(-i.c) + i.c*c;
        double x = wx/w, y = wy/w;
        cout<<*this<<endl;
        cout<<i<<endl;
        return Q(x,y);
    }
     friend ostream& operator<< (ostream &wyjscie, Linia const& ex){
        wyjscie<<ex.a<<"x + "<<ex.b<<"y = "<<ex.c;
        return wyjscie;
    }

};//podwyzszenie przez ile/B

int main()
{
    Linia* pionowa = new Linia(0,1,0);
    Linia* l = new Linia(1,1,3);
 //   Q q = (*l) * (*pionowa);
    cout<<"linia przed podniesieniem "<<*l<<endl;
 //   cout<<"punkt przeciecia przed podniesieniem: "<<q<<endl;
    l = l+3;
    cout<<"Line highered"<<*l<<endl;
    l = l-3;
    cout<<"Line Lowered "<<*l<<endl;
//    q = (*l) * (*pionowa);
 //   cout<<"punkt przeciecia po podniesieniu: "<<q<<endl;
    cout << "Hello world!" << endl;
    return 0;
}

你在这里做指针运算。这意味着我最终指向了某个地址,而它不应该:

Linia* l = new Linia(1,1,3);
l = l+3; // l is a pointer!!!
如果您停止在任何地方使用新的和原始的指针,它可能会正常工作

int main()
{
    Linia pionowa(0,1,0);
    Linia l(1,1,3);
    l = l+3;
    cout<<"Line highered"<< l <<endl;
    l = l-3;
    cout<<"Line Lowered "<< l <<endl;

}

你在这里做指针运算。这意味着我最终指向了某个地址,而它不应该:

Linia* l = new Linia(1,1,3);
l = l+3; // l is a pointer!!!
如果您停止在任何地方使用新的和原始的指针,它可能会正常工作

int main()
{
    Linia pionowa(0,1,0);
    Linia l(1,1,3);
    l = l+3;
    cout<<"Line highered"<< l <<endl;
    l = l-3;
    cout<<"Line Lowered "<< l <<endl;

}

好的,你的问题是什么?到目前为止,您已经完成了哪些调试?这些指针是完全不必要的,也是造成您困惑的原因。运行此程序后,您不能指望计算机完好无损。几分钟前我们没有看到几乎相同的问题吗?好的,您的问题是什么?到目前为止,您已经完成了哪些调试?这些指针是完全不必要的,也是造成您困惑的原因。在运行这个程序后,你不能相信你的计算机完好无损。几分钟前我们没有看到几乎相同的问题吗?C++是@ @搞笑:非常感谢。作品“我会尽快接受它的。”用户1825608,从C语言开始,你应该浏览一本书,看看有什么不同。当我开始使用C时,我就这样做了,它对我来说工作得非常好。如果指针被取消引用,+运算符是否仍然可以正常工作?@TopGunCoder是的,它可以正常工作。但是最好避免所有的原始指针。C++是@ @滑稽:非常感谢。作品“我会尽快接受它的。”用户1825608,从C语言开始,你应该浏览一本书,看看有什么不同。当我开始使用C时,我就这样做了,它对我来说工作得非常好。如果指针被取消引用,+运算符是否仍然可以正常工作?@TopGunCoder是的,它可以正常工作。但最好避免所有原始指针。