資源簡介
C++矩陣計算類,可實現矩陣加減乘轉置求逆等計算

代碼片段和文件信息
#include?“StdAfx.h“
#include?“Matrix.h“
#include?“math.h“
CMatrix::CMatrix(int?rowint?col)
{
iRow=row;
iCol=col;
????dMatData?=?new?double*[row];
for?(int?i=0;?i? {
dMatData[i]=?new?double[col];
for(int?j=0;j {
dMatData[i][j]=0;
}
?}
}
//?copy?constructor,
//拷貝構造函數的作用:
//(1)以類對象作為函數參數傳值調用時;
//(2)函數返回值為類對象;
//(3)用一個已定義的對象去初始化一個新對象時;
CMatrix::CMatrix?(const?CMatrix&?m)
{
??? iRow=m.Row();
iCol=m.Col();
????dMatData?=?new?double*[iRow];
for?(int?i=0;?i? {
dMatData[i]=?new?double[iCol];
for(int?j=0;j {
memcpy(dMatData[i]m.dMatData[i]sizeof(double)*iCol);
}
?}
???
}
CMatrix::~CMatrix(void)
{
????for?(int?i=0;?i? {
delete[]?dMatData[i];
?}
delete[]?dMatData;
}
//返回數組元素(引用返回)
double&?CMatrix::operator?()?(int?row?int?col)
{
????if?(row?>=?iRow?||?col?>=?iCol)
{
??????throw(?“CMatrix::operator():?Index?out?of?range!“);
}
????return?dMatData[row][col];?
}
////返回數組元素(重載)
double?CMatrix::operator?()?(int?row?int?col)?const
{
????if?(row?>=?iRow?||?col?>=?iCol)
{
??????throw(?“CMatrix::operator():?Index?out?of?range!“);
}
????return?dMatData[row][col];?
}
//重載預算符+
CMatrix?operator?+?(const?CMatrix&?m1const?CMatrix&?m2)
{
???if((m1.Col()!=m2.Col())?||(m1.Row()!=m2.Row())?)
???{
???????throw(?“CMatrix::operator+:?The?two?matrix?have?different?size!“);
???}
???CMatrix?matTmp(m1.Row()m1.Col());
???for(int?i=0;i ???{
???for(int?j=0;j ???{
?????????????matTmp(ij)=m1(ij)+m2(ij);?????
???}
???}
???return?matTmp;
}
//重載賦值運算符=,當左右兩邊矩陣的大小不相等時,
//以右邊的大小為基準調整左邊矩陣的大小
CMatrix?&CMatrix::operator?=?(const?CMatrix&?m)?
{
//revised?in?2011-4-1?by?Daiwujiao
?//???if(iRow!=m.Row()||iCol!=m.Col())
//{
?//???????throw(?“CMatrix::operator=:?The?two?matrix?have?different?size!“);
//}
if(iRow!=m.Row()||iCol!=m.Col())
{
SetSize(m.Row()m.Col());
}
for?(int?i=0;?i? {
for(int?j=0;j {
dMatData[i][j]=m(ij);
}
?}
????return?*this;
}
//調整矩陣大小,原有值不變
void?CMatrix::SetSize?(int?row?int?col)
{
???if?(row?==?iRow?&&?col?==?iCol)
???{
??????return;
???}
???double?**rsData?=?new?double*[row];
??? for?(int?i=0;?i? {
rsData[i]=?new?double[col];
for(int?j=0;j {
rsData[i][j]=0;
}
?}
int?minRow=(iRow>row)?row:iRow;
????int?minCol=?(iCol>col)?col:iCol;
????int??colSize?=?minCol?*?sizeof(double);
????
???for?(int?i=0;?i????{
??????memcpy(?rsData[i]?dMatData[i]?colSize);
???}
????for?(int?i=0;?i? {
?????????delete[]?dMatData[i];
}
delete[]?dMatData;
dMatData=rsData;
????iRow=row;
iCol=col;
????return;
}
//重載預算符-
CMatrix?operator?-?(const?CMatrix&?m1const?CMatrix&?m2)
{
???if((m1.Col()!=m2.Col())?||(m1.Row()!=m2.Row())?)
???{
???????throw(?“CMatrix::operator-:?The?t
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-01-19?13:30??Matrix\
?????文件????????7449??2015-10-22?21:01??Matrix\Matrix.cpp
?????文件????????1159??2015-10-15?21:56??Matrix\Matrix.h
評論
共有 條評論