题目概述:
有两个均为3行3列的矩阵ml和m2,编写程序实现矩阵类Matrix,并重载运算符“+”、“>>”和“<<”,使之能用于矩阵m1和m2相加、输入和输出。
完整代码:
#include#include #include using namespace std; class Matrix { public: int x = 0, y = 0, num[3][3] = {}; Matrix(){}; // 初始化构造函数 Matrix(int hangx, int liey):x(hangx),y(liey){}; void input() //对应赋值 { for(int i = 0; i < x; i++) { for(int j = 0; j < y; j++) { num[i][j] = rand() % 9 + 1; } } } void show() { for(int i = 0; i < x; i++) { for(int j = 0; j < y; j++) { cout << num[i][j] << " "; } cout << endl; } //以矩阵形式输出 } friend istream & operator>>(istream &in, Matrix &m); friend ostream & operator<<(ostream &out, const Matrix &m); friend Matrix & operator+(const Matrix& m1, const Matrix& m2); //声明 }; istream& operator>>(istream &in, Matrix &m) //输入非常量,Matrix前不加const { in >> m.x >> m.y; //输入矩阵有几行几列 m.input(); return in; } ostream& operator<<(ostream &out, const Matrix &m) { for(int i = 0; i < m.x; i++) { for(int j = 0; j < m.y; j++) { out << m.num[i][j] << " "; } out << endl; } return out; } //重载输入输出流的格式基本上框架很固定 Matrix& operator+(const Matrix& m1, const Matrix& m2) { int size = m1.x; static Matrix m3(m1); for(int i = 0; i < size; i++) { for(int j = 0; j < size; j++) { m3.num[i][j] += m2.num[i][j]; } } //对应相加,放到m3 return m3; } int main() { srand(int(time(0))); //int型随机种子 Matrix a, b, c; cin >> a; //测试>>重载 cin >> b; c = a + b; //测试+重载 cout << "matrixa:" << endl << a << endl << "matrixb:" << endl << b << endl; cout << "matrixc:" << endl << c; //测试<<重载 }
注释理解:
1.重载运算符'+'目的就是能够目的是令人看起来舒适,1+1=2,那矩阵A+B=C也应该能够直接用A+B得到,让人理解上与输入上一致。
2.重载运算符'>>','<<'的目的也是令人看起来舒适的操作,让输入输出符号后面能够直接跟上我想要输入与输出的矩阵的内容。其实就是重载头文件中iostream里输入istream和输出ostream流,我看作是重载一个新的该符号的函数定义,使得输入输出流符号'>>','<<' 后能识别矩阵类,从而直接在符号后加上矩阵类进行操作运算。
输出结果示例:
初学,粗浅理解,欢迎指正!一起努力!



