永发信息网

求帮忙解决 ,拜谢 ,0 error(s), 0 warning(s)但是输不出来结果,

答案:3  悬赏:20  手机版
解决时间 2021-01-30 06:05
  • 提问者网友:遮云壑
  • 2021-01-29 18:40
设计一个矩阵类,要求矩阵类中重载运算符加(+)和赋值(=),主函数定义类对象并调用重载的运算符。
提示: (1) 本题考虑可加(即加与被加矩阵的行列数必须分别相等)和可赋值(等号左值和右值的行列数必须分别相等)情况,其他情况输出 “ program terminated! ”
(2) 要求分别输入矩阵 am 和 bm 的行列数,各矩阵元素,分别计算 cm=am+bm;am=bm; 并进行输出
(3) 定义相应的构造函数和析构函数
(4) 类中的成员变量应当有三个: int row,col; 分别表示矩阵的行数和列数,另外还需要定义一个一级指针m用来申请动态空间,存放 row*col 个整数

#include <iostream.h>
//using namespace std;
#include <stdlib.h>
class Matrix
{
protected:
int row,col;
int *m;
public:
Matrix(int a,int b)
{
row=a;
col=b;
m=new int[a*b];
for(int i=0;i<row*col;i++)
cin>>m[i];
}
Matrix()
{
row=3;
col=3;
m=new int[9];
for(int i=0;i<9;i++)
m[i]=0;
}
void disp()
{
for(int i=0;i<row;i++)
{
cout<<'\t';
for(int j=0;j<col;j++)
cout<<*(m+i*col+j)<<'\t';
cout<<endl;
}
}
friend Matrix operator +(const Matrix & ,const Matrix &);
Matrix &operator = (const Matrix &x)
{
Matrix p;
if(x.col!=p.col||x.row!=p.row)
cout<<"program terminated!"<<endl;
for(int i=0;i<col*row-1;i++)
p.m[i]=x.m[i];
return *this;
}
~Matrix()
{
delete []m;
}
};

Matrix operator +(const Matrix &x,const Matrix &y)
{
if(x.col!=y.col||x.row!=y.row)
cout<<"program terminated!"<<endl;
for(int i=0;i<x.col*x.row-1;i++)
x.m[i]+=y.m[i];
return x;
}
int main()
{
int row_a,col_a,row_b,col_b;
cout<<"请输入am矩阵的行数和列数:";
cin>>row_a>>col_a;
Matrix am(row_a,col_a);
cout<<"请输入bm矩阵的行数和列数:";
cin>>row_b>>col_b;
Matrix bm(row_b,col_b),cm;
cout<<"am:"<<endl;
am.disp();
cout<<"bm:"<<endl;
bm.disp();
cm=am+bm;
cout<<"cm=am+bm:"<<endl;
cm.disp();
am=bm;
cout<<"am=bm:"<<endl;
am.disp();
return 0;
}
最佳答案
  • 五星知识达人网友:迟山
  • 2021-01-29 18:54
给你改好了,你自己试试
#include <iostream>//这里 如果你是在window环境下编译 改成 #include <iostream.h>
using namespace std;
#include <stdlib.h>
class Matrix{
protected:
int row,col;
int *m;
public:
Matrix(int a,int b)
{
cout<<"Matrix(int a,int b) is called"<<endl;
row=a;
col=b;
m=new int[a*b];
for(int i=0;i<row*col;i++)
cin>>m[i];
}
Matrix()
{
cout<<"Matrix() is called"<<endl;
row=2;
col=2;
m=new int[4];
for(int i=0;i<4;i++)
m[i]=0;
}
void disp()
{
for(int i=0;i<row;i++){
cout<<'\t';
for(int j=0;j<col;j++)
cout<<*(m+i*col+j)<<'\t';
cout<<endl;
}
}
friend Matrix operator +(const Matrix & ,const Matrix &);
Matrix &operator = (const Matrix &x)//这里重载赋值操作符,只是把地址里面的值给赋值了,并不是赋值地址,也不能赋值地址,
{
delete []m;
*m = '\0';
m = new int[x.row*x.col];//这里是省略了 this指针的 this.m = new int[x.row*x.col];
for(int i=0;i<x.col*x.row;i++)
*(m+i) = *(x.m+i);//因为上面分配的地址是连续的,所以这样赋值,这里也省略了this指针
return *this;
}
~Matrix(){
delete []m;
}
};
Matrix operator +(const Matrix &x,const Matrix &y){
if(x.col!=y.col||x.row!=y.row)
cout<<"program terminated!"<<endl;
cout<<"called operator+"<<endl;
Matrix p;
p.col = x.col;
cout<<"p.col="<<p.col<<endl;
p.row = x.row;
cout<<"p.row="<<p.row<<endl;
p.m = new int[x.col*x.row];
for(int i=0;i<x.col*x.row;i++)
*(p.m+i) = *(x.m+i) + *(y.m+i);//这里重载+号 操作符 也是一样的
return p;
}
int main()
{
int row_a,col_a,row_b,col_b;
cout<<"please input the am:\n";
cin>>row_a>>col_a;
Matrix am(row_a,col_a);
cout<<"please input the bm:\n";
cin>>row_b>>col_b;
Matrix bm(row_b,col_b);
cout<<"am:"<<endl;
am.disp();
cout<<"bm:"<<endl;
bm.disp();
cout<<"cm:"<<endl;
//cm.disp();
Matrix cm=am+bm;
cout<<"cm=am+bm:"<<endl;
cm.disp();
am=bm;
cout<<"am=bm:"<<endl;
am.disp();
return 0;
}
全部回答
  • 1楼网友:动情书生
  • 2021-01-29 20:10
重新检查一下你的构造函数
  • 2楼网友:山有枢
  • 2021-01-29 19:23

int x=3,y=4后边少了分号

第三行的void swap(int ,int )同样少了分号

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯