⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmatrix.cpp

📁 本人用C++编的矩阵类
💻 CPP
字号:
////////////////////////////////////////////////////////////////
//文件名: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 t();
    //矩阵相加
    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>
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::t()
{
	CMatrix tempMatrix(m_col, m_row);
	int length = m_row * m_col;
	tempMatrix.m_matrix = new double[length]; //为矩阵分配内存空间
	for (int row = 0; row < m_col; row++) //行
	{
		for (int col = 0; col < m_row; col++) //列
		{
			tempMatrix.m_matrix[row* m_row+ col] = m_matrix[col* m_col+ row];
		}		
	}	
	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)
{
	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; //返回相乘后所得的矩阵
		
	}
	
}

////////////////////////////////////////////////////////////////

void main()
{
	CMatrix a(2,2),b(2,2),c(2,2),d(2,2),aa(1,4);
	double	x[4]={1,2,3,4};
	a.setMatrix(x,4);
	a.display();
	c=a.t();
	c.display();
	aa.setMatrix(x,4);
	aa.display();
	c=aa.t();
	a=c^+b;
	c.display();	
	a.display();
	b=a;
	a=a*b;
	c=a*b*b*b;
	a.display();b.display();c.display();
	(b*b*b).display();
	a=b+c;
	CMatrix e(a);
	d.display();
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -