题目:定义3×3矩阵类Matrix,在其中重载运算符“+”、“-”、“*”,实现矩阵的基本运算。
首先,我们先确定这个矩阵类的基本功能,我们来声明其成员函数的功能,列出来如下:
#include<iostream>
using namespace std;
class Matrix{ //矩阵类
private:
int row, column; //成员变量行和列
int pt[10][10]; //定义一个最大为10×10的矩阵
public:
Matrix(); //构造函数初始化矩阵行和列
Matrix(int r, int c);
~Matrix();
Matrix operator+(Matrix &x); //矩阵+运算,双目
Matrix operator-(Matrix &x); //矩阵-运算,双目
Matrix operator*(const Matrix &x); //矩阵*运算,双目
Matrix operator=(const Matrix &x); //声明重载“=”运算符
void Set_rowcol(int m,int n); //设置矩阵行和列
void SetMatrix(); //设置矩阵元素
void ShowMatrix(); //输出矩阵
};
确定好类的基本功能之后,我们来逐个实现:
首先是构造函数系列:
Matrix::Matrix(){ //构造函数初始化矩阵行和列
row = 0; column = 0;
}
Matrix::Matrix(int r, int c) :row(r), column(c){ //构造函数重载,初始化矩阵元素
for (int i = 0; i < row; i++)
for (int j = 0; j < column; j++)
pt[i][j] = 0;
}
Matrix::~Matrix(){} //析构函数
运算符重载实现:
Matrix Matrix::operator+(Matrix &x){ //矩阵+运算,双目运算符
Matrix temp(row, x.column);
for (int i = 0; i < row; i++){
for (int j = 0; j < column; j++)
temp.pt[i][j] = pt[i][j] + x.pt[i][j];
}
return temp;
}
Matrix Matrix::operator-(Matrix &x){ //矩阵-运算,双目运算符
Matrix temp(row, x.column);
for (int i = 0; i < row; i++){
for (int j = 0; j < column; j++)
temp.pt[i][j] = pt[i][j] - x.pt[i][j];
}
return temp;
}
Matrix Matrix::operator*(const Matrix &x){ //矩阵*运算,双目运算符
Matrix temp(row, x.column);
for (int i = 0; i < row; i++){
for (int j = 0; j < x.column; j++){
for (int k = 0; k < column; k++)
temp.pt[i][j] += pt[i][k] * x.pt[k][j];
}
}
return temp;
}
Matrix Matrix::operator=(const Matrix &x){ //复制运算符=重载,只能重载为成员函数
for (int i = 0; i < row; i++)
for (int j = 0; j < column; j++)
(*this).pt[i][j] = x.pt[i][j];
return *this;
}
然后就是矩阵的输入和输出函数功能实现:
void Matrix::Set_rowcol(int m,int n){
row = m;
column = n;
}
void Matrix::SetMatrix(){ //设置矩阵元素
for (int i = 0; i < row; i++){
for (int j = 0; j < column; j++){
cin >> pt[i][j];
}
}
}
void Matrix::ShowMatrix(){ //输出矩阵
for(int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
cout << pt[i][j] << " ";
cout << endl;
}
}
最后编写主函数测试:
int main(){
int i1, j1, i2, j2;
Matrix m1, m2, m3;
cout << "输入第一个矩阵m1的行和列:" << endl;
cin >> i1 >> j1;
m1.Set_rowcol(i1, j1);
cout << "请输入第一个矩阵m1元素:" << endl;
m1.SetMatrix();
cout << "输入第二个矩阵m2的行和列:" << endl;
cin >> i2 >> j2;
m2.Set_rowcol(i2, j2);
cout << "请输入第二个矩阵m2元素:" << endl;
m2.SetMatrix();
m3.Set_rowcol(i1, j2); //结果矩阵的行是m1的行,列是m2的列
m3 = m1 + m2;
cout << "m3=m1+m2:" << endl;
m3.ShowMatrix();
m3 = m1 - m2;
cout << "m3=m1-m2:" << endl;
m3.ShowMatrix();
m3 = m1 * m2;
cout << "m3=m1*m2:" << endl;
m3.ShowMatrix();
return 0;
}
运行结果:
这个程序中间其实还是有很多瑕疵的,但是我们今天的主题是运算符的重载,还有矩阵列类的实现,请忽略或提出建议。