定义一个二维数组类,原型可参考如下代码,重载运算符“+”和“[]"。

要求:

1、+运算符实现两个二维数组相加,一个二维数组在主函数内初始化传递给类的构造函数,第二个二维数组由用户输入。

2、[]运算符将二维数组按行进行索引,返回0~N*N-1之间的索引的数组元素值,如果输入参数不在范围内,输出”下标越界!",返回-1.

cont int N=3;//二维数组维数定义

class matrix

{    int m[N][N];

     public:

     matrix(int a[][]);//构造函数

     int operator[]();//[]运算符重载

     matrix operator+(matrix& b);//+运算符重载

     void print();//输出

}

#include<iostream>
using namespace std;
const int N=3;//二维数组维数定义

class matrix{
    int m[N][N];
public:
    matrix(int a[][N]){
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
                m[i][j] = a[i][j];
    }
    int operator[](const int pos){
        if(pos<0 || pos >N*N-1){
            printf("ERROR!");
            return -1;
        }
        return this->m[pos/N][pos%N];
    }
    matrix operator+(const matrix b){
        int _m[N][N];
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
                _m[i][j] = this->m[i][j] + b.m[i][j];
        return {_m};
    }
    void print(){
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++)
                printf("%d ",m[i][j]);
            printf("\n");
        }
    }
};

int main(){
    int num[N][N] = {{1,2,3},{4,5,6},{7,8,9}};
    matrix M1 = matrix(num);
    M1.print();

    printf("The No.8: %d\n", M1[8]);
    printf("The No.3: %d\n", M1[3]);
    printf("The No.-1: %d\n", M1[-1]);

    printf("\nPlease input a matrix(%d*%d):\n",N,N);
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
            scanf("%d",&num[i][j]);
    matrix M2 = matrix(num);
    matrix M3 = M1+M2;
    M3.print();

    return 1;
}

 

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

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

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html