gpt4 book ai didi

c++ - 为什么重载运算符不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 13:07:05 25 4
gpt4 key购买 nike

我正在开发一个 C++ 项目,该项目使用存储在 LinkedList 中的多项式。我想重载重要的运算符,例如 +、-、*、/。当函数返回结果时,我在析构函数方面遇到了一些问题。

 Polynomial& Polynomial::operator+(const Polynomial &p){
Polynomial sum = *this;

if (p.list.isEmpty())
return *this;

ListElement *temp = p.list.first;

while (temp){
sum.list.addSorted(temp->data);
temp = temp->next;
}

return sum;
}

这个函数工作得很好,但是 return sum; 调用了析构函数,我丢失了数据。 Polynomial 类的析构函数调用 list.purge(); 释放链表中的动态内存。所有的类及其方法都很好。

主要有:

Polynomial p1,p2,sum;
p1.input(); //here I input data for first pol
p2.input();

sum=p1+p2; //I overloaded operator=, it works fine

我必须做什么才能“停止”析构函数?我想在屏幕上输出多项式 sum。谢谢!

最佳答案

最好这样重载运算符+:

Polynomial operator+(const Polynomial& p1, const Polynomial &p2){
if (p1.list.isEmpty())
return p2;
else if (p2.list.isEmpty())
return p1;

Polynomial sum = p1;
ListElement *temp = p2.list.first;
while (temp){
sum.list.addSorted(temp->data);
temp = temp->next;
}

return sum;
}

1. 让它有两个参数,并使它成为Polynomial类的 friend

2. 返回object而不是reference

关于c++ - 为什么重载运算符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41709609/

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