读书人

关于重载函数 与析构函数的有关问题

发布时间: 2012-03-07 09:13:51 作者: rapoo

关于重载函数 与析构函数的问题 在线等
#include<iostream.h>
class shuzu
{
public:
shuzu(int a,int b);
~shuzu();
shuzu operator+(shuzu&);
friend ostream& operator<<(ostream&,shuzu &s);
friend istream& operator>>(istream&,shuzu &s);
shuzu operator=(shuzu&);

private:
int m,n;
int **z;
};


shuzu::shuzu(int a,int b):m(a),n(b)
{
z=new int *[m];
z[0]=new int [m*n];
for(int i=1;i<m;i++)
{
z[i]=z[i-1]+n;
}

for(i=0;i<m;i++)
for(int j=0;j<n;j++)
z[i][j]=0;

}

shuzu shuzu::operator+(shuzu &s)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
z[i][j]=z[i][j]+s.z[i][j];
return *this;
}



istream& operator>>(istream&input,shuzu &s)
{for(int i=0;i<s.m;i++)
for(int j=0;j<s.n;j++)
input>>s.z[i][j];
return input;
}


ostream& operator<<(ostream&output,shuzu&s)
{int k=0;
for(int i=0;i<s.m;i++)
for(int j=0;j<s.n;j++)
{output<<s.z[i][j]<<" ";
k++;
if(k%s.m==0)output<<endl;


}
return output;
}
shuzu shuzu::operator=(shuzu&s)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
z[m][n]=s.z[m][n];
return *this;
}









shuzu::~shuzu()
{
delete []z[0];
delete []z;
}

int main()
{
int m,n;
cout<<"输入矩阵行数m:";
cin>>m;
cout<<"输入矩阵列数n:";
cin>>n;
shuzu s(m,n),s1(m,n),s2(m,n);cout<<"初始化矩阵:"<<endl<<s2;
cout<<"输入矩阵s:"<<endl;
cin>>s;
cout<<"输入矩阵s1:"<<endl;
cin>>s1;

cout<<"矩阵相加得:"<<endl;
s2=s;
cout<<(s+s1);


return 0;
}


我要实现矩阵相加对+重载;
问题:为什么=重载错误了;如果不写=重载函数也不能实现s2=s;
如果删去析构函数,和s2=s;
程序能正确运行;如果不删去析构函数,编译没错,相加结果也正确,但最后报错;
请高手帮帮我 在线等





[解决办法]
修改了赋值构造,+,增加拷贝构造

C/C++ code
#include<iostream>using namespace std;class shuzu{public:shuzu(int a,int b);shuzu(const shuzu& s);~shuzu();shuzu& operator+(shuzu&);friend ostream& operator<<(ostream&,shuzu &s);friend istream& operator>>(istream&,shuzu &s);shuzu& operator=(const shuzu&);private:int m,n;int **z;};shuzu::shuzu(int a,int b):m(a),n(b){int i,j;z=new int *[m];z[0]=new int [m*n];for(i=1;i<m;i++){z[i]=z[i-1]+n;}for(i=0;i<m;i++)for(j=0;j<n;j++)z[i][j]=0;}shuzu::shuzu(const shuzu& s){int i,j;m=s.m;n=s.n;z=new int *[m];z[0]=new int [m*n];for(i=1;i<m;i++){z[i]=z[i-1]+n;}for(i=0;i<m;i++)for(j=0;j<n;j++)z[i][j]=s.z[i][j];}shuzu& shuzu::operator+(shuzu &s){for(int i=0;i<m;i++)for(int j=0;j<n;j++)z[i][j]=z[i][j]+s.z[i][j];return *this;}istream& operator>>(istream&input,shuzu &s){ for(int i=0;i<s.m;i++)for(int j=0;j<s.n;j++)input>>s.z[i][j];return input;}ostream& operator<<(ostream&output,shuzu&s){int k=0;for(int i=0;i<s.m;i++)for(int j=0;j<s.n;j++){ output<<s.z[i][j]<<" ";k++;if(k%s.m==0)output<<endl;}return output;}shuzu& shuzu::operator=(const shuzu&s){int mm=m>s.m?s.m:m;int nm=n>s.n?s.n:n;for(int i=0;i<mm;i++)for(int j=0;j<nm;j++)z[m][n]=s.z[m][n];return *this;}shuzu::~shuzu(){delete []z[0];delete []z;}int main(){int m,n;cout<<"ÊäÈë¾ØÕóÐÐÊým:";cin>>m;cout<<"ÊäÈë¾ØÕóÁÐÊýn:";cin>>n;shuzu s(m,n),s1(m,n),s2(m,n);cout<<"³õʼ»¯¾ØÕó£º"<<endl<<s2;cout<<"ÊäÈë¾ØÕós:"<<endl;cin>>s;cout<<"ÊäÈë¾ØÕós1:"<<endl;cin>>s1;cout<<"¾ØÕóÏà¼ÓµÃ£º"<<endl;s2=s;cout<<(s+s1);system("pause");return 0;} 


[解决办法]
#include<iostream.h>
class shuzu
{
public:
shuzu(int a,int b);
~shuzu();
shuzu& operator+(shuzu&); //这里如果不想用拷贝构造的话,就得返回引用
friend ostream& operator<<(ostream&,shuzu &s);
friend istream& operator>>(istream&,shuzu &s);
void operator=(shuzu&);

private:
int m,n;
int **z;
};


shuzu::shuzu(int a,int b):m(a),n(b)
{
z=new int *[m];
z[0]=new int [m*n];
for(int i=1;i<m;i++)
{
z[i]=z[i-1]+n;
}

for(i=0;i<m;i++)
for(int j=0;j<n;j++)
z[i][j]=0;

}




istream& operator>>(istream&input,shuzu &s)
{ for(int i=0;i<s.m;i++)
for(int j=0;j<s.n;j++)
input>>s.z[i][j];
return input;
}


ostream& operator<<(ostream&output,shuzu&s)
{int k=0;
for(int i=0;i<s.m;i++)
for(int j=0;j<s.n;j++)
{ output<<s.z[i][j]<<" ";
k++;
if(k%s.n==0)output<<endl; //把s.m改为s.n


}
return output;
}
shuzu& shuzu::operator+(shuzu &s)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
z[i][j]=z[i][j]+s.z[i][j];
return *this;
}

void shuzu::operator=(shuzu&s)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
z[i][j]=s.z[i][j]; //这里你对比下吧,太不小心了
}









shuzu::~shuzu()
{
delete []z[0];
delete []z;
}

int main()
{
int m,n;
cout<<"输入矩阵行数m:";
cin>>m;
cout<<"输入矩阵列数n:";
cin>>n;
shuzu s(m,n),s1(m,n),s2(m,n);cout<<"初始化矩阵:"<<endl<<s2;
cout<<"输入矩阵s:"<<endl;
cin>>s;
cout<<"输入矩阵s1:"<<endl;
cin>>s1;

cout<<"矩阵相加得:"<<endl;
s2=s;
cout<<(s+s1);

return 0;
}

读书人网 >C++

热点推荐