本人编写的一个矩阵类,大家给点意见吧


//文件名:CMatrix.h
//功  能:矩阵类CMatrix的声明
//作  者:01计机(1)班  何海强  200124151109

#ifndef _CMATRIX_H_
#define _CMATRIX_H_

class CMatrix //矩阵类
{
public:
    //构造函数、析构函数、拷贝构造函数、赋值运算符
    CMatrix(int row, int col);
    ~CMatrix();
    CMatrix(const CMatrix &rhs);
    CMatrix& operator=(const CMatrix &rhs);
   
    //填充矩阵
    bool setMatrix(const double *array, int size);
    //获取矩阵中的所有元素
    bool getMatrix(double *array);
    //获取矩阵的行数
    void getRow(int &row);
    //获取矩阵的列数
    void getCol(int &col);
    //显示矩阵
    bool display(void);
   
    //矩阵相加
    CMatrix operator+(const CMatrix &rhs);
    //矩阵相减
    CMatrix operator-(const CMatrix &rhs);
    //矩阵相乘
    CMatrix operator*(const CMatrix &rhs);
    //常数与矩阵相乘
    CMatrix operator*(double constant);

private:
    double *m_matrix; //指向矩阵的指针
    int    m_row; //矩阵的行数
    int    m_col; //矩阵的列数
};

#endif






//文件名:CMatrix.cpp
//功  能:矩阵类CMatrix的实现
//作  者:01计机(1)班  何海强  200124151109

#include <iostream>
#include "CMatrix.h"

using namespace std;


//一般构造函数
CMatrix::CMatrix(int row, int col)
:m_matrix(NULL), m_row(0), m_col(0)
{
    int length = 0;

 //判断行数与列数是否合乎规定
    if ((row < 1) || (col < 1))
    {
        return;
    }
   
    length = row * col;

    m_matrix = new double[length]; //为矩阵分配内存空间
    if (NULL == m_matrix)
    {
        return;
    }
    else
    {
        m_row = row;
        m_col = col;
       
        //首先用0来填充矩阵里面的所有元素
        for (int index = 0; index < length; ++index)
        {
            m_matrix[index] = 0;
        }

    }

}

//析构函数
CMatrix::~CMatrix()
{
    delete [] m_matrix; //释放矩阵所占用的内存
}

//拷贝构造函数
CMatrix::CMatrix(const CMatrix &rhs)
:m_matrix(NULL), m_row(rhs.m_row), m_col(rhs.m_col)
{
 int length = 0;

    if (NULL == rhs.m_matrix) //矩阵rhs为空
    {
        return;
    }
   
 length = m_row * m_col;

    m_matrix = new double[length]; //为矩阵分配内存空间
    if (NULL == m_matrix)
    {
        m_row = 0;
        m_col = 0;
       
        return;
    }
    else
    {
        //用rhs矩阵里面的元素来填充本矩阵
        for (int index = 0; index < length; ++index)
        {
            m_matrix[index] = rhs.m_matrix[index];
        }

    }

}

//赋值运算符
CMatrix& CMatrix::operator=(const CMatrix &rhs)
{
 int length = 0;

 //判断是否自赋值
 if (this != &rhs)
 {
  //释放原矩阵所占用的内存
        delete [] m_matrix;
     m_matrix = NULL;
     m_row = 0;
     m_col = 0;

  //矩阵rhs是否为空
  if (rhs.m_matrix != NULL)
  {
   length = rhs.m_row * rhs.m_col;

   m_matrix = new double[length]; //为矩阵分配内存空间
   if (m_matrix != NULL)
   {
    m_row = rhs.m_row;
    m_col = rhs.m_col;

    //用rhs矩阵里面的元素来填充本矩阵
    for (int index = 0; index < length; ++index)
    {
     m_matrix[index] = rhs.m_matrix[index];
    }

   }

  } //if ((rhs.m_row > 0) && (rhs.m_col > 0))

 }

 return *this; //返回本对象的引用

}

//填充矩阵
bool CMatrix::setMatrix(const double *array, int size)
{
 if ((NULL == m_matrix) || (NULL == array))
 {
  return false;
 }

 if (size != (m_row * m_col)) //长度不相符
 {
  return false;
 }
 else
 {
  //用数组array里面的值来填充本矩阵
  for (int index = 0; index < size; ++index)
  {
   m_matrix[index] = array[index];
  }

  return true;

 }

}

//获取矩阵中的所有元素
bool CMatrix::getMatrix(double *array)
{
 int length = 0;

 if ((NULL == m_matrix) || (NULL == array))
 {
  return false;
 }
 else
 {
  length = m_row * m_col;

  //用数组array来返回本矩阵中所有元素值
  for (int index = 0; index < length; ++index)
  {
   array[index] = m_matrix[index];
  }

  return true;

 }

}

//获取矩阵的行数
void CMatrix::getRow(int &row)
{
 row = m_row;
}

//获取矩阵的列数
void CMatrix::getCol(int &col)
{
 col = m_col;
}

//显示矩阵
bool CMatrix::display(void)
{
    if (NULL == m_matrix) //本矩阵为空
 {
  return false;
 }
 else
 {
  //按行输出矩阵
  for (int row = 0; row < m_row; ++row)
  {
   for (int col = 0; col < m_col; ++col)
   {
    cout << m_matrix[row * m_col + col] << '/t'; //同一行中的矩阵元素之间用一个tab 隔开
   }

   cout << '/n'; //准备输出下一行

  }

  return true;

 }

}

//矩阵相加
CMatrix CMatrix::operator+(const CMatrix &rhs)
{
 int length = 0;

 //判断两个矩阵的行数与列数是否分别相等
    if ((m_row == rhs.m_row) && (m_col == rhs.m_col))
    {
  if (NULL == m_matrix)
  {
   return *this; //返回一个空矩阵
  }
  else
  {
   CMatrix tempMatrix(m_row, m_col);

   length = m_row * m_col;

   for (int index = 0; index < length; ++index)
   {
    tempMatrix.m_matrix[index] = m_matrix[index] + rhs.m_matrix[index]; //相加
   }

   return tempMatrix; //返回相加后所得的矩阵

  } //if ((m_row < 1) || (m_col < 1))

    }
    else
    {
  //定义一个空矩阵并返回它
        CMatrix tempMatrix(0, 0);
        return tempMatrix;
    }
   
}

//矩阵相减
CMatrix CMatrix::operator-(const CMatrix &rhs)
{
 int length = 0;

 //判断两个矩阵的行数与列数是否分别相等
    if ((m_row == rhs.m_row) && (m_col == rhs.m_col))
    {
  if (NULL == m_matrix)
  {
   return *this; //返回一个空矩阵
  }
  else
  {
   CMatrix tempMatrix(m_row, m_col);

   length = m_row * m_col;

   for (int index = 0; index < length; ++index)
   {
    tempMatrix.m_matrix[index] = m_matrix[index] - rhs.m_matrix[index]; //相减
   }

   return tempMatrix; //返回相减后所得的矩阵

  } //if ((m_row < 1) || (m_col < 1))

    }
    else
    {
  //定义一个空矩阵并返回它
        CMatrix tempMatrix(0, 0);
        return tempMatrix;
    }
   
}

//矩阵相乘
CMatrix CMatrix::operator*(const CMatrix &rhs)
{
 if (m_col == rhs.m_row) //第一个矩阵的列数与第二个矩阵的行数相等
 {
  if (NULL == m_matrix)
  {
   return *this; //返回一个空矩阵
  }
  else
  {
   CMatrix tempMatrix(m_row, rhs.m_col);

   for (int row = 0; row < m_row; ++row) //行
   {
    for (int col = 0; col < rhs.m_col; ++col) //列
    {
        for (int index = 0; index < m_col; ++index)
        {
            tempMatrix.m_matrix[row*rhs.m_col+col] +=
       (m_matrix[row*m_col+index] * rhs.m_matrix[index*rhs.m_col+col]);
        }
       
    }

   }

   return tempMatrix;

  } //if (NULL == m_matrix)

 }
 else
 {
  //定义一个空矩阵并返回它
  CMatrix tempMatrix(0, 0);
  return tempMatrix;
 }

}

//常数与矩阵相乘
CMatrix CMatrix::operator*(double constant)
{
    int length = 0;

 //本矩阵是否为空
 if (NULL == m_matrix)
 {
  return *this; //返回一个空矩阵
 }
 else
 {
  CMatrix tempMatrix(m_row, m_col);

  length = m_row * m_col;

  for (int index = 0; index < length; ++index)
  {
   tempMatrix.m_matrix[index] = m_matrix[index] * constant; //矩阵元素与常数相乘
  }

  return tempMatrix; //返回相乘后所得的矩阵

 }

}


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值