我尝试将2个大数字相乘表示为链接的lilsts(重载运算符*),但是似乎出现了错误。你们任何一个可以帮助我吗?我认为乘法功能是正确的,因为我已经对其进行了测试。 但是当我尝试使运算符超载时,我似乎无法指责出什么问题* ..... 我尝试遍历一个列表,然后与另一个节点的每个节点进行多态循环。 extra 分割两个大数字的技巧?谢谢!这是我的代码:
Numar *Numar :: operator* (Numar *nr2) //overloading operator*
{
Lista *L = new Lista;
Numar *rezultat = new Numar(L);//links the list to the number
Lista *aux = new Lista;
Numar *rez2 = new Numar(aux); //an auxiliary
int t = 1;
Nod *p2 = this->L->prim; //1st node of this
while (p2) //loop the 2nd number
{
rez2 = nr2->multiply(p2->info * t); //multiply the 1st list with an int
cout<<"rez2 "<<rez2;
rezultat = *rezultat + rez2;
cout<<"rezultat "<<rezultat;
t *= 10; //that carry
p2 = p2->next;
}
return rezultat;
}
答案 0 :(得分:1)
问题在于此定义不适用于您要执行的操作;
Numar *Numar :: operator* (Numar *nr2)
如果要定义类型Numar
和overload arithmetic operators,则需要处理值(最终是const或rvalue引用),而不要处理指针。否则,一旦进行一些临时计算,就会泄漏内存。
因此,您需要修改代码设计,以便最终获得以下签名:
Numar Numar :: operator* (Numar nr2)
要执行此操作,Numar
和Lista
需要实现rule of 3。
编辑: :为避免在不必要时复制值,您可能希望(如1201programalarm在评论中所建议的那样)进行以下操作:
Numar Numar :: operator* (const Numar& nr2)
但是考虑到const,这可能需要对在nr2上调用的成员函数进行定义。