Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2342152
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:02:14

#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) |
给主人留下些什么吧!~~