#include
#include
class matrix
{
int rows,cols;
int *elems;
public:
matrix(int r,int c)//¹¹Ô캯³õʼ»¯¾ØÕó
{
rows=r;
cols=c;
elems=new int[rows*cols];
}
int operator()(int row,int col);//ÖØÔØ£¨£©ÊµÏֺϷ¨µÄÊäÈë
void setelem(int row,int col,int val);//¸ø¾ØÕó¸³Öµ
friend matrix operator +(matrix p,matrix q);//ÖØÔØ+ʵÏÖ2¸ö¾ØÕóµÄÏà¼Ó
void disp();//Êä³ö½á¹û
};
int matrix::operator()(int row,int col)
{
if (row>=1 && row<=rows && col>=1 && col<=cols)//ºÏ·¨Ôò·µ»ØÆäÖµ
return elems[(row-1)*cols+(col-1)];
else
return 0;
}
void matrix::setelem(int row,int col,int val)//¸ø¾ØÕó¸³Öµ
{
if(row>=1 && row<=rows && col>=1 && col<=cols)
elems[(row-1)*cols+(col-1)]=val;
}
matrix operator + (matrix p,matrix q)
{matrix m(p.rows,p.cols);
if(p.rows!=q.rows || p.cols!=q.cols)
return m;
for(int r=1;r<=p.rows;r++)
for(int c=1;c<=p.cols;++c)
m.setelem(r,c,p(r,c)+q(r,c));
return m;
};
void matrix::disp()//Êä³ö¾ØÕó
{
for (int r=1;r<=rows;++r)
cout<<"";
for(int c=1;c<=cols;c++)
cout< cout<}
void main()
{
matrix a(2,3),b(2,3),d;
a.setelem(1,1,1);
a.setelem(1,2,2);
a.setelem(1,3,3);
a.setelem(2,1,4);
a.setelem(2,2,4);
a.setelem(2,3,6);
b.setelem(1,1,6);
b.setelem(1,2,8);
b.setelem(1,3,9);
b.setelem(2,1,3);
b.setelem(2,2,2);
b.setelem(2,3,5);
cout<<"Êä³ö½á¹û"<cout<<"A¾ØÕó"<a.disp;
cout<<"B¾ØÕó"<b.disp;
d=a+b;
cout<<"A+B¾ØÕó"<d.disp;
}
--------------------next---------------------
//程序是个矩阵类, 可实现两个矩阵相加的功能
//要注意那三个构造函数都不可省略, 否则程序会出现问题和内存泄漏
#include
#include
class matrix
{
public:
matrix(int r, int c) { InitVariables(); AllocateMem(r,c); } //这个构造函数分配内存
matrix(matrix &mx) { InitVariables(); *this=mx; } //由于内存是动态分配的, 要强调分配内存和内存复制, 复制地址无效
matrix() { InitVariables(); } //空的构造函数, 创建一个空的矩阵
~matrix() { FreeMem(); } //析构函数里面要释放已经分配的内存
int operator()(int row, int col)const; //常量的操作符, 即: 在这个操作符里面不修改类成员变量, 并且允许常量对象调用
matrix &operator=(const matrix &mx); //要强调内存分配和内存复制, 因为这个内存都是动态分配的, 复制地址是无效的
void setelem(int row, int col, int val); //给矩阵的某行某列赋值
matrix operator+(const matrix &mx)const; //矩阵相加, 返回值为一个临时的矩阵, 而这个操作符也是不修改类本身成员变量的
void disp(void)const; //显示矩阵, 这个也是 const 的
private:
int rows,cols; //矩阵的行数和列数
int *elems; //矩阵的元素, 这个是动态分配内存的, 复制的时候要注意只复制地址是无效的, 要进行 memcpy 才可以的
void InitVariables(void) { rows=0; cols=0; elems=NULL; } //初始化变量的默认值
void AllocateMem(int r, int c) { FreeMem(); rows=r; cols=c; elems=new int[rows*cols]; } //为矩阵元素分配内存
void FreeMem() { if(elems) { delete[]elems; InitVariables(); }} //为矩阵元素释放内存
};
int matrix::operator()(int row, int col)const //这个我没修改
{
if (row>=1 && row<=rows && col>=1 && col<=cols)
return elems[(row-1)*cols+(col-1)];
else
return 0;
}
void matrix::setelem(int row, int col, int val) //这个我没修改
{
if(row>=1 && row<=rows && col>=1 && col<=cols)
elems[(row-1)*cols+(col-1)]=val;
}
matrix matrix::operator+(const matrix &mx)const //直接定义成类的操作符就可以了
{
matrix m;
if(rows!=mx.rows || cols!=mx.cols)
return m;
m.AllocateMem(rows,cols);
for(int r=1;r<=rows;r++)
for(int c=1;c<=cols;c++)
m.setelem(r,c,(*this)(r,c)+mx(r,c));
return m;
}
matrix&matrix::operator=(const matrix &mx) //矩阵赋值要复制元素
{
AllocateMem(mx.rows,mx.cols);
memcpy(elems,mx.elems,sizeof(int)*rows*cols);
return *this;
}
void matrix::disp(void)const //这个我没修改
{
for(int r=1;r<=rows;++r)
{
cout<<" ";
for(int c=1;c<=cols;c++)
cout< cout< }
}
void main() //这个我没修改
{
matrix a(2,3),b(2,3),d;
a.setelem(1,1,1);
a.setelem(1,2,2);
a.setelem(1,3,3);
a.setelem(2,1,4);
a.setelem(2,2,4);
a.setelem(2,3,6);
b.setelem(1,1,6);
b.setelem(1,2,8);
b.setelem(1,3,9);
b.setelem(2,1,3);
b.setelem(2,2,2);
b.setelem(2,3,5);
cout<<"==== Matrix A ===="< a.disp();
cout<<"==== Matrix B ===="< b.disp();
d=a+b;
cout<<"====== A+B ======="< d.disp();
}
...................................................
此贴已被 victor 修改, 修改时间: 2003-12-19 22:07:28
--------------------next---------------------
阅读(1288) | 评论(0) | 转发(0) |