Dotnet Road

Share The Knowledge

C++作业:一个简单的矩阵类

因为老板的关系,去听了C++的课,作业是一个简单的矩阵类。在 win xp+vc6 通过

#include <iostream.h>

class YuMatrix
{
private:
    
int _rowLen,_colLen;
    
float **data;
    initData(
int c,int r);
public:
    YuMatrix(
int col=0,int row=0);
    YuMatrix(YuMatrix 
&ymt);
    
~YuMatrix();
    ShowMatrix();
    YuMatrix 
&operator +(YuMatrix ym);
    YuMatrix 
operator *(YuMatrix ym);
    YuMatrix 
&operator =(YuMatrix ym);
}
;

YuMatrix::initData(
int c,int r)
{
    _rowLen
=r;
    _colLen
=c;
    data 
= new float *[r];
    
for (int i=0;i<r;i++)
    
{
        data[i]
=new float[c];
    }

}


YuMatrix::YuMatrix(
int col,int row)
{
    initData(col,row);
    
for(int i=0;i<_rowLen;i++)
        
for(int j=0;j<_colLen;j++)
            data[i][j]
=(float)((i+1)+0.1*(j+1));
}


YuMatrix::YuMatrix(YuMatrix 
&ymt)
{
    _rowLen
=ymt._rowLen ;
    _colLen
=ymt._colLen ;
    initData(_colLen,_rowLen);
    
for(int i=0;i<_rowLen;i++)
        
for(int j=0;j<_colLen;j++)
            data[i][j]
=ymt.data[i][j];
}


YuMatrix::ShowMatrix()
{
    
for (int i=0;i<_rowLen;i++)
    
{
        
for(int j=0;j<_colLen;j++)
        
{
            cout
<<data[i][j]<<" ";
        }

        cout
<<"\n";
    }

}


YuMatrix 
&YuMatrix::operator +(YuMatrix ym)
{
    
//行列相等才能相加
    if(_colLen==ym._colLen&&_rowLen==ym._rowLen)  
    
{
        
for(int i=0;i<_rowLen;i++)
            
for(int j=0;j<_colLen;j++)
                data[i][j]
+=ym.data[i][j];
        
return(*this);
    }

}


YuMatrix YuMatrix::
operator *(YuMatrix ym)
{
    
//第一个的列数等于第二个的行数才能相乘
    if(_colLen==ym._rowLen)
    
{
        
//构造新的矩阵
        YuMatrix tempym(ym._colLen,_rowLen);
        
float temp=0;
        
for(int i=0;i<ym._colLen;i++)
            
for(int j=0;j<_rowLen;j++)
            
{
                
for(int k=0;k<_colLen;k++)
                    temp
+=(data[j][k]*ym.data[k][i]);
                tempym.data[j][i]
=temp;
                temp
=0;
            }

        
return(tempym);
    }

}


YuMatrix 
&YuMatrix::operator =(YuMatrix ym)
{
    
if(_colLen!=ym._colLen || _rowLen!=ym._rowLen)
    
{
        YuMatrix::
~YuMatrix ();
        initData(ym._colLen,ym._rowLen);
    }

    
for(int i=0;i<_rowLen;i++)
            
for(int j=0;j<_colLen;j++)
                data[i][j]
=ym.data[i][j];
    
return(*this);
}


YuMatrix::
~YuMatrix()
{
    
if(_colLen*_rowLen != 0 ) 
    

        
for(int i=_rowLen-1;i>=0;i--
        

            
if (data[i]!=NULL)
                delete[] data[i]; 
        }
 
        
if (data!=NULL)
            delete[] data; 
    }
     

}



void main(void)
{    
    YuMatrix matrix1(
3,4);
    YuMatrix matrix2(matrix1);
    YuMatrix matrix3(
2,3);
    YuMatrix matrix4(
3,3);
    YuMatrix matrix5(
2,3);
    YuMatrix matrix6(
5,5);
    matrix1.ShowMatrix();
    cout
<<endl;
    matrix2.ShowMatrix();
    cout
<<endl;
    matrix3
=matrix1+matrix2;
    matrix3.ShowMatrix();
    cout
<<endl;
    matrix6
=matrix4*matrix5;
    matrix6.ShowMatrix();
}




posted on 2005-10-11 12:31  皮生  阅读(2306)  评论(4)    收藏  举报

导航