C++ 实现二维矩阵的加减乘等运算

Matrix.h#include "iostream"

using namespace std;

class Matrix
{
    private:
        int row, list;
        double **HL;
    public:
        Matrix(int r_ = 0, int l_ = 0);    
        Matrix(int r_, int l_, double **newone);    
        Matrix(const Matrix & rhs);    
        ~Matrix();
        Matrix operator + (const Matrix & rhs);
        Matrix operator - (const Matrix & rhs);
        Matrix operator = (const Matrix & rhs);
        Matrix operator * (const Matrix & rhs);
        friend ostream & operator << (ostream & os, const Matrix & rhs);
};
Matrix.cpp#include "Matrix.h"
int i, j;
Matrix::Matrix(int r_, int l_):row(r_),list(l_)
{
    HL = new double *[row];
    for(i = 0; i < row; i++)
    {
        HL[i] = new double [list];
    }
    cout<<"please enter Matrix :"<<endl;
    for(i = 0; i < row; i++)
    {
        for(j=0; j<list; j++)
        {
            cin>>HL[i][j];
        }
    }
}

Matrix::Matrix(int r_, int l_, double **newone):row(r_),list(l_) //构造函数重载,
//主要用于加法减法的return使用
{
    HL = new double *[row];
    for(i = 0; i< row; i++)
    {
        HL[i] = new double [list];
    }
    for(i = 0; i <row; i++)
    {
        for(j = 0; j<list; j++)
        {
            HL[i][j] = newone[i][j];
        }
    }
}

Matrix::Matrix(const Matrix & rhs)
{
    if(this != & rhs)
    {
        this->row = rhs.row;
        this->list = rhs.list;
        HL = new double *[row];
        for(i = 0; i<row; i++)
        {
            HL[i] = new double [list];
        }
        for(i = 0; i<row; i++)
        {
            for(j = 0; j<list; j++)
            {
                this->HL[i][j] = rhs.HL[i][j];
            }
        }
    }

}


Matrix::~Matrix() //析构函数,删除开辟的空间
{
    cout<<"~ Matrix : row = "<<row<<", list = "<<list<<endl<<endl;
    for(i = 0; i<row; i++)
    {
        delete [] HL[i];
    }
    delete [] HL;
}

Matrix Matrix::operator + (const Matrix & rhs)
{
    if( (this->row == rhs.row) && (this->list == rhs.list))
    {
        double **newone;
        int r_, l_;
        r_ = row; l_ = list;
        newone = new double *[row];
        for(i = 0; i < row; i++)
        {
            newone[i] = new double [list];
        }
        for(i = 0; i < row; i++)
        {
            for(j = 0; j<list; j++)
            {
                newone[i][j] = HL[i][j]+rhs.HL[i][j];
            }
        }
        return Matrix(r_, l_, newone);
    }
}

Matrix Matrix::operator - (const Matrix & rhs)
{
    if((this->row == rhs.row) && (this->list == rhs.list))
    {
        double **newone;
        int r_, l_;
        r_ = row; l_ = list;
        newone = new double *[row];
        for(i = 0; i<row;i++)
        {
            newone[i] = new double [list];
        }
        for(i=0;i<row;i++)
        {
            for(j = 0; j<list; j++)
            {
                newone[i][j] = HL[i][j]+rhs.HL[i][j];
            }
        }
            return Matrix(r_, l_, newone);
    }

}

Matrix Matrix::operator * (const Matrix& rhs)
{
    if((this->row = rhs.row) && (this->list = rhs.list))
    {
        double **newone;
        int r_, l_;
        r_ = row; l_ = list;
        newone = new double *[row];
        for(i = 0; i<row; i++)
        {
            newone[i]=new double [list];
        }
        for(i = 0;i<row;i++)
        {
            for(j = 0; j<list; j++)
            {
                newone[i][j]=0;
                if(i == j)
                {
                for(int k = 0; k<list; k++)
                {
                    newone[i][j] = newone[i][j] + HL[i][k]*rhs.HL[k][j];
                }
                }
                else
                {
                    for(int k = 0; k<list; k++)
                    {
                        newone[i][j] = newone[i][j] + HL[i][k]*rhs.HL[k][j];
                    }
                }

            }

        }
        return Matrix(r_,l_,newone);
    }
}


Matrix Matrix::operator = (const Matrix & rhs)
{
    if((this->row = rhs.row) && (this->list == rhs.list))
    {
        for(i = 0; i<row; i++)
        {
            for(j = 0; j<list; j++)
            {
                this->HL[i][j] = rhs.HL[i][j];
            }
        }
        return (*this);
    }
}



ostream & operator << (ostream & os, const Matrix & rhs)
{
    os<<"Matrix: row="<<rhs.row<<" , list = "<<rhs.list<<endl;
    for(i = 0; i<rhs.row; i++)
    {
        for(j = 0; j<rhs.list; j++)
        {
            os<<rhs.HL[i][j]<<" ";
        }
        os<<endl;
    }
    return os;
}

int main()
{
    int m,n,x,y;
    cin>>n>>m>>x>>y;
    Matrix aa(n,m), bb(n,m), cc(n,m), dd(x,y);
    cout<<endl<<aa<<endl<<bb<<endl<<cc<<endl<<dd<<endl;
    cout<<(aa+bb+cc)<<endl<<(cc*bb)<<endl;
    return 0;
}

原文链接: https://www.cnblogs.com/zhibei/p/12203351.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/192018

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午5:54
下一篇 2023年2月12日 下午5:54

相关推荐