关于重载操作符构成的表达式的问题
小弟最近编了一个类用来管理多项式的运算,重载了赋值操作符 "= "和乘法操作符 "* ",但是在计算c=a*b时,c无法得到a*b的结果。加急请高手指点啊!代码附在下边了:
class CPoly
{
public:
CPoly operator*(const CPoly &b);
CPoly operator*(const CComplex &b);
CPoly operator+(const CPoly &b);
CPoly &operator=(const CPoly &a);
void Initialize(CComplex b[], UINT n);
CPoly();
virtual ~CPoly();
UINT order; //存储多项式的阶数,大小为数组a的长度减1
CComplex *a; //存储多项式系数的数组,按升幂排列,类型为自定义复数类
};
CPoly &CPoly::operator =(const CPoly &b)
{
if(this == &b)
return *this;
if(a!=NULL)
delete [] a;
a = new CComplex[b.order+1];
order=b.order;
for(int i=0; i <order+1; i++)
{
a[i]=b.a[i];
}
return *this;
}
CPoly CPoly::operator *(const CPoly &b)
{
CPoly c;
c.order=order+b.order;
c.a = new CComplex[c.order+1];
int i,j;
for(i=0; i <c.order+1; i++)
{
c.a[i].Initialize(0.0,0.0);
}
for(i=0; i <=b.order; i++)
{
for(j=order; j> =0; j--)
{
c.a[j+i]=c.a[j+i]+a[j]*b.a[i];
}
}
return c;
}
测试代码如下:
CPoly a,b,c;
a.Initialize(data1,1);
b.Initialize(data2,1);//以上部分能够正常运行
c=a*b;//乘法函数内部结果正确,但是c无法接受其结果
[解决办法]
需要写一个复制构造函数
return c; 返回以一个局部对象,调用默认的复制构造函数给临时对象
c=a*b执行 完临时对象就被析构拉
但是对象c的数据成员CComplex *a;指向的临时对象CComplex *a;
自己没有分配内存,所以临时对象析构了,他就什么也不是拉
[解决办法]
加这个复制构造函数试试 其实跟 重载=运算符很象
CPloy::CPloy(const CPloy &b)
{
a = new CComplex[b.order+1];
order=b.order;
for(int i=0; i <order+1; i++)
{
a[i]=b.a[i];
}
}
[解决办法]
c=a+b
复制构造函数和operator=两个都会调用
你在两个函数中都用cout输出信息就知道拉