关于运算符重载的c++程序(已修改)
感谢几位楼主对我上一贴的回复,我回去琢磨了一下对构造函数进行了修改(使用默认参数),可编译的时候总是显示INTERNAL COMPILER ERROR
希望各位再帮忙指点一下
#include<iostream>
using namespace std;
class Matrix
{
private:
const int rows,cols; //矩阵的行数和列数
int * mem; //动态申请矩阵空间
public:
//类中的常数据成员需用构造函数的初始化表来初始化
Matrix(int r=0,int c=0,int *m=0):rows(r),cols(c)
{int i;
mem=new int[rows*cols];
if(m)
for(i=0;i<rows*cols;i++)
mem[i]=m[i];
}
//拷贝构造函数
Matrix(Matrix &m):rows(m.rows),cols(m.cols)
{int i;
mem=new int[m.rows*m.cols];
for(i=0;i<m.rows*m.cols;i++)
mem[i]=m.mem[i];
}
int operator()(int i,int j);
void operator=(Matrix &m);
friend Matrix operator+(Matrix &m1,Matrix &m2);
friend Matrix operator-(Matrix &m1,Matrix &m2);
void print();
~Matrix() {delete mem;}
};
int Matrix::operator()(int i,int j)
{int k;
k=(i-1)*cols+j;
return(mem[k-1]);
}
void Matrix::operator=(Matrix &m)
{int i;
mem=new int[m.rows*m.cols];
for(i=0;i<m.rows*m.cols;i++)
mem[i]=m.mem[i];
}
Matrix operator+(Matrix &m1, Matrix &m2)
{Matrix m3(m1.rows,m1.cols);
int i;
for(i=0;i<m1.rows*m1.cols;i++)
m3.mem[i]=m1.mem[i]+m2.mem[i];
return m3;
}
Matrix operator-(Matrix &m1, Matrix &m2)
{Matrix m3(m1.rows,m1.cols);
int i;
for(i=0;i<m1.rows*m2.cols;i++)
m3.mem[i]=m1.mem[i]-m2.mem[i];
return m3;
}
void Matrix::print()
{int k;
for(k=0;k<rows*cols;k++)
{ cout<<mem[k]<<" ";
if((k+1)%cols==0)
cout<<endl; //换行
}
}
int main()
{ int a[9]={2,0,0,0,2,0,0,0,2};
int b[9]={1,0,0,0,1,0,0,0,1};
Matrix mat1(3,3,a),mat2(3,3,b);
cout<<"矩阵1:"<<endl;
mat1.print();
cout<<"矩阵2:"<<endl;
mat2.print();
cout<<"矩阵1第1行第1列元素是: "<<mat1(1,1)<<endl; //取矩阵mat1的第1行第1列元素
cout<<"矩阵2第1行第2列元素是: "<<mat1(1,2)<<endl; //取矩阵mat2的第1行第2列元素
Matrix mat3(3,3);
mat3=mat1+mat2;
Matrix mat4(3,3);
mat4=mat1-mat2;
cout<<"矩阵1与矩阵2之和是:"<<endl;
mat3.print();
cout<<"矩阵1与矩阵2之差是:"<<endl;
mat4.print();
return 0;
}