C++ 重载+运算符的奇怪行为
我创建了一个表示Linia aX+bY=c行的类,并重载了+运算符,所以现在它返回新的Linia对象,该对象具有c=c+b/参数。但问题是,当我使用这个操作符时,给定直线对象的所有字段都变为0C++ 重载+运算符的奇怪行为,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 =
#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是的,它可以正常工作。但最好避免所有原始指针。