首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于重载操作符构成的表达式的有关问题

2012-03-01 
关于重载操作符构成的表达式的问题小弟最近编了一个类用来管理多项式的运算,重载了赋值操作符 和乘法

关于重载操作符构成的表达式的问题
小弟最近编了一个类用来管理多项式的运算,重载了赋值操作符 "= "和乘法操作符 "* ",但是在计算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输出信息就知道拉

热点排行