C++编写的矩阵类

     下面是采用VS2010中VC++编写的矩阵类,实现了基本的乘法操作,郁闷的是,由于矩阵大小是由构造函数动态分配的内存空间,在实现矩阵乘法时,返回的矩阵对象成了局部堆栈对象,分配的数据指针为NULL,不知各位大虾有什么好的办法没? 


#include 
<iostream>
#include 
<cstdlib>
using namespace std;

//矩阵类的声明
class Matrix
{
private
    
const int ROWS,COLS;
    
int **m_matrix;
public:
    Matrix
& operator*=(Matrix &mat);
    
void Output() const;
    Matrix(
int rows,int cols);
    
~Matrix();

    friend inline Matrix 
operator*(const Matrix &lhs,const Matrix &rhs);
};

//矩阵相乘算法(*)
inline Matrix operator*(const Matrix &lhs,const Matrix &rhs)
{
    
//检验前置条件
    if(lhs.COLS != rhs.ROWS)
    {   
        cerr 
<< "ERROR:矩阵相乘必须满足前一个矩阵的列数等于后一个矩阵的行数" << endl;
    }

    
//乘积矩阵
    Matrix ret(lhs.ROWS,rhs.COLS);

    
//乘积操作
    for(int i=0;i<lhs.ROWS;i++)
    {
        
for(int j=0;j<rhs.COLS;j++)
        {
            
for(int k =0; k<lhs.COLS;k++)
            {
                ret.m_matrix[i][j] 
+= lhs.m_matrix[i][k]*rhs.m_matrix[k][j]; 
            }
        }
    }

    
//返回乘积(ret是堆栈对象,不能返回)
    return ret;
}

//矩阵构造函数,进行了动态内存分配
Matrix::Matrix(int rows = 10int cols = 10):ROWS(rows),COLS(cols)
{
    m_matrix 
= new int*[ROWS];
    
for(int i=0;i<ROWS;i++)
    {
        m_matrix[i] 
= new int[COLS];
        
for(int j=0;j<COLS;j++)
        {
            m_matrix[i][j] 
= rand() % 100;
        }
    }
}

//矩阵析构函数,释放动态分配的内存
Matrix::~Matrix()
{
    
for(int i=0;i<ROWS;i++)
    {   
        delete[] m_matrix[i];
    }
    delete[] m_matrix;
}

//矩阵打印函数,打印出矩阵的内容
void Matrix::Output() const
{
    
for(int i=0;i<ROWS;i++)
    {
        
for(int j=0;j<COLS;j++)
        {
            cout 
<< m_matrix[i][j] << "\t";
        }
        cout 
<< endl;
    }
}                                                                                         

 

posted on 2010-10-25 20:40  虚怀若谷  阅读(13519)  评论(2编辑  收藏  举报

导航