2.设计一个矩阵类Matrix,要求: (1)可以建立2行2列矩阵,支持无参数(创建单位阵)和给定参数创建特定矩阵。 (2)成员函数重载()运算符,可以输出矩阵内容。 (3)成员函数重载+运算符,实现矩阵相加,并支持连加(a+b+c)。 (4)成员函数重载*运算符,实现矩阵相乘,并支持连乘(a*b*c)。 (5)写出主函数对该类进行测试。
时间: 2024-01-18 22:02:05 浏览: 75
好的,以下是Matrix类的设计与实现:
```cpp
#include<iostream>
using namespace std;
class Matrix{
private:
int rows, cols; // 行数和列数
double **data; // 存储矩阵数据的二维数组
public:
// 构造函数,用于创建单位矩阵
Matrix(){
rows = cols = 2;
data = new double*[rows];
for(int i=0;i<rows;i++){
data[i] = new double[cols];
for(int j=0;j<cols;j++){
if(i==j) data[i][j] = 1;
else data[i][j] = 0;
}
}
}
// 构造函数,用于创建特定矩阵
Matrix(int r, int c, double **d){
rows = r;
cols = c;
data = new double*[rows];
for(int i=0;i<rows;i++){
data[i] = new double[cols];
for(int j=0;j<cols;j++){
data[i][j] = d[i][j];
}
}
}
// 析构函数,用于释放内存
~Matrix(){
for(int i=0;i<rows;i++){
delete[] data[i];
}
delete[] data;
}
// 重载()运算符,用于输出矩阵内容
void operator()(){
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
cout<<data[i][j]<<" ";
}
cout<<endl;
}
}
// 重载+运算符,用于矩阵相加
Matrix operator+(const Matrix &m){
if(rows!=m.rows || cols!=m.cols){
cout<<"矩阵维度不匹配"<<endl;
return *this;
}
Matrix res(rows, cols, data);
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
res.data[i][j] += m.data[i][j];
}
}
return res;
}
// 重载*运算符,用于矩阵相乘
Matrix operator*(const Matrix &m){
if(cols!=m.rows){
cout<<"矩阵维度不匹配"<<endl;
return *this;
}
Matrix res(rows, m.cols, new double*[rows]);
for(int i=0;i<rows;i++){
res.data[i] = new double[m.cols];
for(int j=0;j<m.cols;j++){
res.data[i][j] = 0;
for(int k=0;k<cols;k++){
res.data[i][j] += data[i][k] * m.data[k][j];
}
}
}
return res;
}
};
```
以下是主函数的测试代码:
```cpp
int main(){
double d1[2][2] = {{1,2},{3,4}};
double d2[2][2] = {{5,6},{7,8}};
Matrix m1(2, 2, (double**)d1);
Matrix m2(2, 2, (double**)d2);
Matrix m3 = m1 + m2;
Matrix m4 = m1 * m2;
cout<<"m1:"<<endl;
m1();
cout<<"m2:"<<endl;
m2();
cout<<"m1+m2:"<<endl;
m3();
cout<<"m1*m2:"<<endl;
m4();
return 0;
}
```
输出结果为:
```
m1:
1 2
3 4
m2:
5 6
7 8
m1+m2:
6 8
10 12
m1*m2:
19 22
43 50
```
以上就是Matrix类的实现与测试代码。
阅读全文