【问题描述】设计方阵类,求矩阵加法。
1、设计方阵类,包含二级指针int **data,指向一个动态申请的n*n的二维数组【n为全局变量】
2、重载运算符“>>”,直接输入矩阵
3、重载运算符"+",使之能用于矩阵相加(a+b),且在该函数中输出相加后的结果矩阵
4、实现析构函数,释放动态内存空间。
【输入形式】
1、第1行输入方阵的阶数n
2、接下来的n行,输入第一个方阵的数据
3、接下来的n行,输入第二个方阵的数据,以空格分隔每列数据
【输出形式】
输出相加后的n*n方阵,以空格分隔每列数据,每行之间换行输出
【样例输入】
3
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
【样例输出】
2 4 6
8 10 12
14 16 18
#include <iostream>
using namespace std;
int n=0; //全局变量n表示矩阵的阶数
class Matrix {
private:
int** data; //二级指针,指向动态申请的二维数组
public:
Matrix(); //无参构造函数
void operator+(Matrix&); //以成员函数形式重载的加法运算符 ,并在函数内部输出运算结果
friend istream& operator>> (istream&,Matrix&); //以友元函数形式重载的输入运算符
~Matrix();//析构函数
};
Matrix::Matrix() {
data=NULL;
}
istream &operator>>(istream &in,Matrix &m) {
m.data =new int*[n];
for(int i=0; i<n; i++)
m.data[i]=new int[n];
for(int i=0; i<n; i++)
for(int k=0; k<n; k++)
in>>m.data[i][k];
return in;
}
void Matrix::operator+(Matrix &m) {
for(int i=0; i<n; i++)
for(int k=0; k<n; k++)
data[i][k]=m.data[i][k]+data[i][k];
for(int i=0; i<n; i++)
for(int k=0; k<n; k++) {
cout<<data[i][k]<<" ";
if(k==n-1) cout<<endl;
}
}
Matrix::~Matrix() {
for(int i=0; i<n; i++)
delete []data[i];
delete []data;
}
int main() {
Matrix m1,m2;
cin >> n;
cin >> m1;
cin >> m2;
m1 + m2;
return 0;
}