读书人

有关多项式数组的有关问题

发布时间: 2012-08-09 15:59:21 作者: rapoo

有关多项式数组的问题
[code=C/C++][/code]#include<iostream.h>

class Matrix
{
public:
Matrix(int n);
Matrix(const Matrix &s);
Matrix();
~Matrix()
{
delete []p;
}
Matrix operator+(Matrix &s);
//Matrix &operator-(Matrix &s);
friend ostream &operator<<(ostream &out, Matrix &s);
friend istream &operator>>(istream &in, Matrix &s);
//Matrix &operator=(Matrix &s);
private:
int *p;/*多项式数组,下标为0存最高次幂,为1存最高次幂的系数 ,后面的按幂的递减存该项的系数
,空项则存零*/

};

Matrix::Matrix()
{}

Matrix::Matrix(int n)
{
p = new int[n + 2];
*p = n;
}

Matrix::Matrix(const Matrix &s)
{
p = new int[s.p[0]];
for(int i=0; i<s.p[0]+2; i++)
p[i] = s.p[i];
}

/*Matrix &Matrix::operator=(Matrix &s)
{
for(int i=0; i<p[0]+2; i++)
s.p[i] = p[i];
return *this;
}*/

Matrix Matrix::operator+(Matrix &s)
{
int num1,max;//num1表示两个多项式的最高次幂之差
max = (p[0]>s.p[0])?p[0]:s.p[0];
Matrix obj(max);
if(p[0] > s.p[0])
{
num1 = p[0] - s.p[0];
for(int j=1; j<num1+1;j++)
obj.p[j] = p[j];
for(int i=num1+1; i<p[0]+2;i++)
obj.p[i] = p[i] + s.p[i-num1];
}
else
{
num1 = s.p[0] - p[0];
for(int j=1; j<num1+1;j++)
obj.p[j] = s.p[j];
for(int i=num1+1; i<s.p[0]+2;i++)
obj.p[i] = s.p[i] + p[i-num1];
}
return obj;
}

ostream &operator<<(ostream &out, Matrix &s)
{
int j = s.p[0];
for(int i=1; i<s.p[0]+2; i++)
{
if(i != 1)
{
if(s.p[i] > 0)
{
out<<"+"<<s.p[i]<<"x^"<<j;
j--;
}
else
if(s.p[i] < 0)
{
out<<s.p[i]<<"x^"<<j;
j--;
}
else
j--;
}
else
{
out<<s.p[i]<<"x^"<<j;
j--;
}
}
out<<endl;
return out;
}

istream &operator>>(istream &in,Matrix &s)
{
cout<<"请输入多项式的系数,按降幂的顺序,缺项则为0:";
for(int i=1; i<s.p[0]+2; i++)
in>>s.p[i];
return in;
}

void main()
{
int n=0,m=0;
cout<<"请输入多项式的最高次幂:";
cin>>n>>m;
Matrix obj1(n),obj2(m);
cin>>obj1>>obj2;
cout<<obj1;
cout<<obj2;
Matrix obj(obj1 + obj2);
cout<<obj;
}
里面的函数体都没有大问题,这个我都测试过,但主函数结束时掉哟过析构函数时出问题,不能够释放内存,可能出现指针悬挂的问题,但本人找不出错在哪,求各位大哥大姐帮帮忙,也希望大家点评下这段代码,小弟感激不尽。。

[解决办法]
Matrix Matrix::operator+(Matrix &s)
这个函数有问题吧
函数里面的局部变量 Matrix obj(max);
出了函数体就会被释放(析构)掉的
应该用内存分配(new)的

读书人网 >C++

热点推荐