oj 贵州大学 第四次作业(c++)(运算符重载)第一题

设计一个矩阵类,当创建矩阵类的对象时,根据提供的行数和列数信息,内部可以通过动态内存分配的机制创建一个任意大小的二维数组用来存储矩阵的数据。相应的,对象析构时应该释放动态分配的数组。对Matrix类重载以下运算符:

(1)将下标运算符[]重载为矩阵类的成员函数,实现用对象名加两个下标的形式能够直接访问二维数组元素的效果;

(2)重载“<<”运算符,实现矩阵的输出功能;

(3)重载“+”运算符(重载为非成员的形式),实现矩阵加法;

(4)重载“*”运算符(重载为非成员的形式),实现矩阵乘法;

main函数已经写好,请根据main函数的内容完成该类的设计。

int main(){

    int a,b;

    cin>>a>>b;

    Matrix m1(a,b),m2(a,b),m3(b,a);

    int i,j;

    for(i=0;i<m1.getRows();i++)

        for(j=0;j<m1.getColumns();j++)

            cin>>m1[i][j];

    for(i=0;i<m2.getRows();i++)

        for(j=0;j<m2.getColumns();j++)

            cin>>m2[i][j];

    for(i=0;i<m3.getRows();i++)

        for(j=0;j<m3.getColumns();j++)

            cin>>m3[i][j];  

    cout<<"Matrix M1:"<<endl;

    cout<<m1;

    cout<<"Matrix M2:"<<endl;

    cout<<m2;

    cout<<"Matrix M3:"<<endl;

    cout<<m3;

    cout<<"Result of Matrix Addition:"<<endl;

    cout<<m1+m2;

    cout<<"Result of Matrix Multiplication:"<<endl;

    cout<<m1*m3;

    return 0;

}

输入描述

1、第一行输入两个整数a和b

2、接下来输入第一个矩阵:a行b列

3、接下来输入第二个矩阵:a行b列

4、接下来输入第三个矩阵:b行a列

输出描述

依次分别输出三个矩阵的数据

然后输出第一个矩阵和第二个矩阵相加的结果

最后输出第一个矩阵和第三个矩阵相乘的结果

提示

你需要提交除main函数之外的其他代码

注意动态内存分配可能需要解决深复制问题

样例输入 

2 3
1 2 3
4 5 6
1 2 3
4 5 6
1 2
3 4
5 6

样例输出

Matrix M1:
1 2 3
4 5 6
Matrix M2:
1 2 3
4 5 6
Matrix M3:
1 2
3 4
5 6
Result of Matrix Addition:
2 4 6
8 10 12
Result of Matrix Multiplication:
22 28
49 64

#include <iostream>
using namespace std;

class Matrix
{
private:
    int Rows;
    int Columns;
    int **arr;

public:
    int getRows()
    {
        return Rows;
    }

    int getColumns()
    {
        return Columns;
    }

    Matrix(int Rows, int Columns)
    {
        this->Rows = Rows;
        this->Columns = Columns;
        arr = new int *;
        for (int i = 0; i < Rows; i++)
        {
            arr[i] = new int[Columns];
        }
    }

    int *&operator[](int &index)
    {
        return this->arr[index];
    }

    friend ostream &operator<<(ostream &out, Matrix &m)
    {
        for (int i = 0; i < m.getRows(); i++)
        {
            for (int j = 0; j < m.getColumns(); j++)
                out << m.arr[i][j] << " ";
            out << endl;
        }
        return out;
    }

    friend Matrix &operator+(Matrix &c1, Matrix &c2)
    {

        Matrix *m = new Matrix(c1.getRows(), c2.getColumns());
        for (int i = 0; i < c1.getRows(); i++)
            for (int j = 0; j < c1.getColumns(); j++)
            {
                m->arr[i][j] = c1.arr[i][j] + c2.arr[i][j];
            }

        return *m;
    }

    Matrix &operator*(Matrix &x) //矩阵乘法运算符重载
    {
        if (this->getColumns() == x.getRows()) //两矩阵相乘必须满足的条件
        {
            Matrix y(this->getRows(), x.getColumns());   //声明一个暂存数据的矩阵
            for (int i0 = 0; i0 < this->getRows(); i0++) //将两矩阵相乘的新矩阵数据导入
            {
                for (int j0 = 0; j0 < x.getColumns(); j0++)
                {
                    float sum = 0;
                    int i = 0;
                    for (int j = 0; j < this->getColumns(); j++, i++)
                    {
                        sum = sum + arr[i0][j] * x.arr[i][j0]; //矩阵相乘公式
                    }
                    y.arr[i0][j0] = sum;
                }
            }
            x = Matrix(y);
            return x;
        }
        else
        {
            cout << "error" << endl;
            return x;
        }
    }
};
 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 南京信息工程大学oj系统库是为了帮助学生提高编程能力、加强算法训练而开设的,库中包含了各种类型的目,涵盖了计算机科学与技术、软件工程、网络工程、物联网等专业的知识点。库中的目难度有高有低,从初级到高级、从简单到复杂都有涵盖,可以满足不同层次、不同需求的学生。 南京信息工程大学oj系统库的目内容丰富多样,可以涉及到各种算法、数据结构、编程语言等方面的知识。学生可以通过解答这些目,了解和掌握不同算法和数据结构的应用场景,提高编程能力和实践动手能力。 南京信息工程大学oj系统库的使用非常方便,学生只需登录系统,在库中选择自己感兴趣或者需要练习的目,然后根据目的要求,编写相应的代码进行提交。系统会自动对代码进行评测,给出相应的反馈和评分,帮助学生了解自己的编程能力和解能力。 同时,南京信息工程大学oj系统库也可以作为教师授课和学生自学的辅助工具。老师可以根据课程内容,选择合适的目进行布置作业或者考试,提升学生的学习兴趣和积极性。对于学生自学的话,可以通过解答库中的目,巩固和加深对于课程知识的理解和掌握。 总之,南京信息工程大学oj系统库是一个重要的学习资源,可以帮助学生巩固和提高编程能力,为他们在计算机科学与技术以及相关领域的学习和就业打下坚实的基础。 ### 回答2: 南京信息工程大学oj系统库是该校为了方便学生进行编程实践和提高编程能力而特别开设的一个在线库。该库的目的是帮助学生巩固课堂所学的理论知识,实践编程技巧,并培养学生解决实际问的能力。 南京信息工程大学oj系统库中包含了各种难度级别的编程目,涵盖了计算机科学与技术、通信工程、软件工程等多个专业领域的知识点。学生可以通过选定特定的目,根据自身编程能力的提升情况逐渐挑战难度更大的目。 在南京信息工程大学oj系统库中,学生可以提交自己的代码,系统会自动对代码进行评测并返回结果。这样可以有效地帮助学生查找代码中的错误,并及时进行修改和改进。除此之外,学生还可以查看别人的解思路和代码实现,借鉴他人的经验,丰富自己的编程思维。 南京信息工程大学oj系统库还提供了在线编程环境,学生无需安装额外的编译器或者IDE,只需通过浏览器就可以完成编程任务。这样方便学生的学习和实践,并提高了学生在编程中的效率和体验。 总之,南京信息工程大学oj系统库是一个宝贵的资源,能够提供给学生进行编程实践和提高编程能力的机会。通过挑战不同难度的目,学生可以不断提升自己的编程水平,更好地适应未来的学习和工作需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值