C++重载运算符实现矩阵乘法
小白的第一篇博客。。。
废话不多说,直接上代码
//头文件
#include "iostream"
using namespace std;
int hang1, lie1; //定义全局变量
int hang2, lie2;
class matrix
{
private:
int a[10][10]; //定义一个二维数组,可以自己决定数组大小,厉害的话可以用动态二维数组
int row, col;
public:
matrix(int, int);
friend matrix operator*(matrix& c1, matrix& c2);
void Input(int hang, int lie);
void Show();
};
定义全局变量是为了好调用数据
在matrix::matrix(int r, int c) //构造函数初始化
{
row = r; col = c;
}
matrix operator*(matrix& c1, matrix& c2) //重载“*”运算符,变成矩阵乘法
{
int i, j, k, sum;
matrix c(hang1, lie2);
for (i = 0; i < hang1; i++)
for (j = 0; j < lie2; j++)
{
sum = 0;
for (k = 0; k < lie1; k++)
{
sum += c1.a[i][k] * c2.a[k][j];
}
c.a[i][j] = sum;
}
for (i = 0; i < hang1; i++)
{
for (j = 0; j < lie2; j++)
{
cout << c.a[i][j] << " ";
}
cout << endl;
}
return c;
}
矩阵乘法就是按照规则来嘛
void matrix::Input(int hang, int lie) //输入矩阵
{
int i, j;
cout << "请输入矩阵" << endl;
for (i = 0; i < hang; i++)
{
for (j = 0; j < lie; j++)
{
cin >> a[i][j];
}
}
}
void matrix::Show() //输出矩阵
{
int i, j;
cout << "矩阵乘法为:" << endl;
for (i = 0; i < hang1; i++)
{
for (j = 0; j < lie2; j++)
{
cout << a[i][j];
cout << " ";
}
cout << endl;
}
}
int main()
{
cout << "请输入矩阵的行数和列数" << endl; //输入你要输入的矩阵的行数和列数
cin >> hang1;
cin >> lie1;
cout << "请输入矩阵的行数和列数" << endl;
cin >> hang2;
cin >> lie2;
if (lie1 == hang2) //判断第一个矩阵的列数等于第二个矩阵的行数,是的话执行矩阵乘法,否就“矩阵错误”
{
matrix c1(hang1, lie1), c2(hang2, lie2),c(hang1,lie2);
c1.Input(hang1,lie1); //把你定义的行数和列数传过去
c2.Input(hang2,lie2);
c=c1* c2; //矩阵乘法
c.Show();
}
else
{
cout << "矩阵错误!" << endl;
}
return 0;
}
我比较菜,这个还有很多改进的地方。
请多多指教。