下面是采用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;
}
}