C++编程入门--矩阵类重载运算符

题目:定义3×3矩阵类Matrix,在其中重载运算符“+”、“-”、“*”,实现矩阵的基本运算。

首先,我们先确定这个矩阵类的基本功能,我们来声明其成员函数的功能,列出来如下:

#include
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 < column; j++){
			for (int k = 0; k < row; 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;
}

运行结果:

C++编程入门--矩阵类重载运算符_第1张图片

OK,到这里这道题算的是完成了,说一下当时的心情,最开始用的指针,发现内存空间分配怎么调试都是有问题的,没什么把握,最后改用数组形式,安全稳妥,这个程序中间其实还是有很多瑕疵的,但是我们今天的主题是运算符的重载,还有矩阵列类的实现,请忽略或提出建议。

你可能感兴趣的:(C++)