C++课程设计c++矩阵类(简洁版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计报告
学院:信息科学与技术学院
专业:电子信息工程
年级:07级2班
姓名:王伟男
学号:2007082060
程序名称:c++矩阵类关于运算符的重载。
指导老师:常耀辉
本程序是一个关于矩阵类。
主要亮点和难点就是通过对“+”,“-”,“*”的重载,从而实现矩阵和矩阵的加,减,乘以及矩阵与常数的乘法。
在程序主要内容中首先定义Cmatrix类,在类中共用部分声明构造函CMatrix(int,int)和CMatrix operator +(CMatrix &M2)——重载矩阵与矩阵加运算,CMatrix operator -(CMatrix &M2) ——重载矩阵与矩阵减运算,CMatrix operator *(int &m)重载矩阵与常数乘法运算,CMatrix operator *(CMatrix &M2)重载矩阵与矩阵乘法运算,再声明bool initialize(int,int)函数,用于矩阵初始化;bool create()函数,用于由用户输入矩阵各元素;void output()函数,用于输出矩阵各元素。
在私有部分定义int m_row——表示矩阵行数;int m_col——表示矩阵列数;double *m_pData——使用指针指向矩阵各元素,接下来就是在类外对各个函数的定义以及对变量的初始化。
最后在主函数中调用重载函数,通过键盘输入你所需矩阵的列数和行数后自行定义你所要用到的矩阵。
不过本程序局限于行数和列数相同的矩阵。
流程图如下:
程序如下:
#include<iostream>
using namespace std;
class CMatrix
{
public:
CMatrix(int,int); //构造函数
bool initialize(int,int); //矩阵初始化
bool create(); //由用户输入矩阵各元素
void output(); //输出矩阵各元素
CMatrix operator +(CMatrix &M2); //重载矩阵加运算
CMatrix operator -(CMatrix &M2); //重载矩阵减运算
CMatrix operator *(int &m); //重载矩阵与常数乘法运算CMatrix operator *(CMatrix &M2); //重载矩阵与矩阵乘法运算private:
int m_row; //矩阵行数
int m_col; //矩阵列数
double *m_pData; //使用指针指向矩阵各元素
};
//构造函数
CMatrix::CMatrix(int r,int c)
{
initialize(r,c);
}
//矩阵初始化函数
bool CMatrix::initialize(int r,int c)
{
m_row=r;
m_col=c;
m_pData=new double[r*c];
for(int i=0;i<m_row*m_col;i++)
{
m_pData[i]=0;
}
return true;
}
//输入矩阵数据元素,创建新矩阵
bool CMatrix::create()
{
m_pData=new double[m_row*m_col];
for(int i=0;i<m_row*m_col;i++)
{
cin>>m_pData[i];
}
return true;
}
//矩阵输出函数
void CMatrix::output()
{
int j=0;
for(int i=0;i<m_row*m_col;i++)
{
cout<<m_pData[i]<<" ";
j++;
if(j==m_col) {j=0;cout<<"\n";}
}
}
//重载矩阵相加运算
CMatrix CMatrix::operator +(CMatrix &M2)
{
CMatrix M=*this;
for(int i=0;i<m_row*m_col;i++)
M.m_pData[i]=m_pData[i]+M2.m_pData[i];
return M;
}
//重载矩阵相减运算
CMatrix CMatrix::operator -(CMatrix &M2)
{
CMatrix M=*this;
for(int i=0;i<m_row*m_col;i++)
M.m_pData[i]=m_pData[i]-M2.m_pData[i];
return M;
}
//重载矩阵与常数相乘运算
CMatrix CMatrix::operator *(int &m)
{
CMatrix M=*this;
for(int i=0;i<m_row*m_col;i++)
M.m_pData[i]=m_pData[i]*m;
return M;
}
//重载矩阵与矩阵乘法运算
CMatrix CMatrix::operator *(CMatrix &M2)
{
CMatrix M=*this;
int j=0;
for(int i=0;i<m_row*m_col;i++)
{
M.m_pData[i]=m_pData[i]*M2.m_pData[i+j*m_col];
j++;
if(j==M2.m_row) j=0;
}
return M2;
}
int main()
{
int length,width,ch;
cout<<"请输入数组的大小(行数列数):";
cin>>length>>width;
CMatrix mtrx1(length,width),mtrx2(length,width),mtrx3(length,width); //输入数组
cout<<"请输入第一个数组:"<<endl;
mtrx1.create();
cout<<"请输入第二个数组:"<<endl;
mtrx2.create();
mtrx3=mtrx1+mtrx2;
cout<<endl<<"相加之后的数组是:"<<endl;
mtrx3.output();
system("pause");
cout<<"请输入第一个数组:"<<endl;
mtrx1.create();
cout<<"请输入第二个数组:"<<endl;
mtrx2.create();
mtrx3=mtrx1-mtrx2;
cout<<endl<<"相减后的数组是:"<<endl;
mtrx3.output();
system("pause");
cout<<"请输入第一个数组:"<<endl;
mtrx1.create();
cout<<"请输入第二个数组:"<<endl;
mtrx2.create();
mtrx3=mtrx1*mtrx2;
cout<<endl<<"相乘后的数组是:"<<endl;
mtrx3.output();
system("pause");
cout<<"请输入一个数组:"<<endl;
mtrx1.create();
cout<<"请输入一个常数:"<<endl; cin>>ch;
mtrx3=mtrx1*ch;
cout<<endl<<"相乘后的数组是:"<<endl; mtrx3.output();
system("pause");
return 0;
}。