题目:
设一个程序,利用重载输入运算和重载输出运算实现对一个2X3的矩阵输入输出,重载‘+’运算符实现两个矩阵相加。利用模板的知识,使矩阵可以是int类型、double类型等其他类型
注意:在定义一个类模板的时候,如果使用到友元函数的时候,要给友元函数另外定义一个函数模板。原因:友元函数不属于类,它是类外函数。而类模板只对类里面的数据成员和成员函数起作用
main.cpp
#include <iostream> using namespace std; #include "class.h" int main() { matrix<double> M1, M2; matrix<double> M3; cin >> M1; cin >> M2; cout << M1 << "----------" << endl; cout << M2; M3 = M1 + M2; cout << M3; system("pause"); return 0; }
class.h
#pragma once template <typename T> class matrix { public: template <typename T1>//因为友元函数是类外函数,所以得另外定义一个函数模板 friend istream &operator >> (istream &, matrix<T1> &);//输入矩阵 template <typename T1> friend ostream &operator << (ostream &, matrix<T1> &);//输出矩阵 matrix<T> operator + (matrix<T> &);//矩阵相加 private: T array[2][3]; }; template<typename T1> istream &operator >> (istream &CIN, matrix<T1> &M) { cout << "输入矩阵(2行3列):" << endl; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { CIN >> M.array[i][j]; } } return CIN;//返回给M } template<typename T1> ostream &operator<<(ostream &OUT1,matrix<T1> &M) { for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { OUT1<<M.array[i][j]; cout<<' '; } cout << endl; } return OUT1;//把返回结果给M } template<typename T> matrix<T> matrix<T>::operator+(matrix<T> &M2) { matrix<T> M3; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { M3.array[i][j] = array[i][j] + M2.array[i][j]; } } return M3; }