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  =   10 int  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;
    }
}                                                                                         

 

转载于:https://www.cnblogs.com/zxher/archive/2010/10/25/1860745.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值