程序如下:
头文件"matrix.h"
template<class T>
class Matrix 
{
public:
Matrix(int r=0,int c=0)
{
  rows=r;
  cols=c;
  element=new T[rows*cols];
}
//Matrix(const Matrix<T>& m); //复制构造函数
~Matrix() {delete [] element;}
int Rows() const {return rows;}
int Columns() const {return cols;}
T& operator()(int i, int j) const;
Matrix<T>& operator=(const Matrix<T>& m);
Matrix<T> operator+() const; // 一元加法
Matrix<T> operator+(const Matrix<T>& m) ;
Matrix<T> operator-() const; // 一元减法
Matrix<T> operator-(const Matrix<T>& m) const;
Matrix<T> operator*(const Matrix<T>& m) const;
Matrix<T>& operator+=(const T& x);
void setdata();
void display();
private:
int rows, cols; // 矩阵维数
T *element; // 元素数组
};
成员函数定义”matrix.cpp“
#include<iostream.h>
#include"Matrix.h"
//对()重载
template<class T>
T& Matrix<T>::operator()(int i, int j) const
{
  return element[(i-1)*cols+j-1];
}
template<class T>
Matrix<T>& Matrix<T>::operator=(const Matrix<T>& m)
{
  int i;
   (*this).rows=m.rows;
   (*this).cols=m.cols;
   delete [] element;
  element=new T[rows*cols];
  for(i=0;i<rows*cols;i++)element[i]=m.element[i];
  return (*this);
}
 template<class T>
Matrix<T> Matrix<T>::operator+() const
{
  

template<class T>
Matrix<T> Matrix<T>::operator+(const Matrix<T>& m)  
{
  int i;
  Matrix<T> w(rows,cols);
  for(i=0;i<rows*cols;i++)  w.element[i]=element[i]+m.element[i];
  return w;
}
template<class T>
Matrix<T> Matrix<T>::operator-() const
{
  int i;
  Matrix<T> w(rows,cols);
  for(i=0;i<rows*cols;i++)w.element[i]=-element[i];
  return w;
}
template<class T>
Matrix<T> Matrix<T>::operator-(const Matrix<T>& m) const
{
  int i;
  Matrix<T> w(rows,cols);
  for(i=0;i<rows*cols;i++)w.element[i]=element[i]-m.element[i];
  return w;
}
template<class T>
Matrix<T> Matrix<T>::operator*(const Matrix<T>& m) const
{//一个矩阵的行数应等于另一个的列即cols==m.rows
  int i,j,k;
  T sum;
  Matrix<T> w;
  w.rows=rows;
  w.cols=m.cols;
  for(i=0;i<rows;i++)
      for(j=0;j<m.cols;j++)
      {
        sum=0;
        for(k=0;k<cols;k++)
            sum+=element[i*cols+k]*m.element[k*m.cols+j];
        w.element[i*w.cols+j]=sum;
      }
      return w;
}
template<class T>
Matrix<T>& Matrix<T>::operator+=(const T& x)
{
int i;
for(i=0;i<rows*cols;i++)element[i]=element[i]+x;
return (*this);

template<class T> 
void Matrix<T>::setdata( )
{
  int i,j;
  for(i=0;i<rows;i++)
     for(j=0;j<cols;j++)
          cin>>element[i*cols+j];
}
template<class T>
void Matrix<T>::display()
{
  int i,j;
  for(i=0;i<rows;i++)
  {
      for(j=0;j<cols;j++)
          cout<<element[i*cols+j]<<"  ";
      cout<<endl;
  }
}
主函数"main.cpp"
#include<iostream.h>
#include"Matrix.cpp"
void main()
{
 Matrix<int> m1(3,3);
 Matrix<int> m2(3,3);
 Matrix<int> m3(3,3);
 m1.setdata();
 m2.setdata();
 m3= m1-m2;//[color=FF0000]出错[/color] 
m3.display();
}