请问各位大佬这个应该怎么做呀

 

参考这篇,你不需要实现的可以删除。:https://wenwen.sogou.com/z/q796148306.htm?spver=1

如有帮助,望采纳。

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;
}

 

这是C语言版本

/*
m1和m2为两个相加的数组首元素地址,r和c为两个数组的行数和列数
m用于存放结果。
调用该函数时,要求m为有足够存储单元、能容纳运算结果的数组首元素地址
*/
void add(int *m,int *m1,int *m2,int r,int c);
void sub(int *m,int *m1,int *m2,int r,int c);
void mult(int *m,int *m1,int *m2,int r,int p,int c);
void disp(int *m,int r,int c);
void main()
{
    int a[3][4]={{2,4,6,8},{1,3,5,7},{11,33,44,22}};
    int b[3][4]={{2,-4,6,-8},{-1,3,-5,7},{11,-33,-44,22}};
    int c[4][3]={{2,4,6},{1,3,5},{1,0,3},{0,2,4}};
    int d[3][4]={0};
    int e[3][3]={0};
    printf("\nA(3x4):\n");
    disp(a[0],3,4);
    printf("\nB(3x4):\n");
    disp(b[0],3,4);
    add(d[0],a[0],b[0],3,4);
    printf("\nD(3x4)=A+B:\n");
    disp(d[0],3,4);
    sub(d[0],a[0],b[0],3,4);
    printf("\nD(3x4)=A-B:\n");
    disp(d[0],3,4);
    printf("\nA(3x4):\n");
    disp(a[0],3,4);
    printf("\nC(4x3):\n");
    disp(c[0],4,3);
    mult(e[0],a[0],c[0],3,4,3);
    printf("\nE(3x3)=A*C:\n");
    disp(e[0],3,3);
}
void add(int *m,int *m1,int *m2,int r,int c){
    int i,j;
    for(i=0; i<r; i++)
        for(j=0; j<c; j++)
            *(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j);
}
void sub(int *m,int *m1,int *m2,int r,int c){
    int i,j;
    for(i=0; i<r; i++)
        for(j=0; j<c; j++)
            *(m+i*c+j) = *(m1+i*c+j) - *(m2+i*c+j);
}
void mult(int *m,int *m1,int *m2,int r,int p,int c){
    int i,j,k,t;
    for(i=0; i<r; i++)
        for(j=0; j<c; j++)
        {
            t=0;
            for(k=0; k<p; k++)
                t += *(m1+i*p+k) * *(m2+k*c+j);
            *(m+i*c+j)=t;
        }
}
void disp(int *m,int r,int c)
{
    int i,j;
    for(i=0; i<r; i++)
    {
        for(j=0; j<c; j++)
            printf("%6d",*(m+i*c+j));
        printf("\n");
    }
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m