64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <stdlib.h>
using namespace std;
class Matrix
{
private:
int row;
int col;
int** m;
public:
Matrix(int , int );
Matrix()
{
int i;
row = 1;
col = 1;
m = new int* [row];
for (i = 0; i < row; i++)
m[i] = new int[col];
}
Matrix operator + (const Matrix&);
Matrix & operator = (const Matrix&);
void disp();
~Matrix();
};
Matrix::Matrix(int r, int c):row(r), col(c)
{
int i, j;
m = new int*[row];
for(i = 0; i < row ;i++)
m[i]=new int[col];
cout << "请输入该矩阵元素:" << endl;
for(i = 0; i <row; i++)
for(j = 0;j<col;j++)
cin >> m[i][j];
}
Matrix Matrix::operator+(const Matrix& n)
{
int i, j;
if (row == n.row && col == n.col)
{
Matrix x;
x.row = row;
x.col = col;
x.m = new int* [row];
for (i = 0; i < row; i++)
x.m[i] = new int[col];
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
x.m[i][j] = m[i][j] + n.m[i][j];
return x;
}
else
{
cout << " program terminated! ";
exit(1);
}
}
Matrix & Matrix::operator = (const Matrix &n)
{
int i, j;
if (row == n.row && col == n.col)
{
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
m[i][j] = n.m[i][j];
}
else
{
for (i = 0; i < row; i++)
delete[] m[i];
delete[] m;
row = n.row;
col = n.col;
m = new int*[row];
for (i = 0; i < row; i++)
m[i] = new int[col];
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
m[i][j] = n.m[i][j];
}
return *this;
}
void Matrix::disp()
{
for(int i=0;i<row;i++)
{
cout << '\t';
for(int j=0;j<col;j++)
cout<<m[i][j]<<'\t';
cout << endl;
}
}
Matrix::~Matrix()
{
int i;
for(i=0;i<row;i++)
delete [] m[i];
delete [] m;
}
int main()
{
int row_a,col_a,row_b,col_b;
cout<<"请输入am矩阵的行数和列数:"<<endl;
cin>>row_a>>col_a;
Matrix am(row_a,col_a);
cout<<"请输入bm矩阵的行数和列数:"<<endl;
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;
}
没有拷贝构造函数,百度深浅复制的区别
多半遇到了空指针或m【i】为空。