zoukankan      html  css  js  c++  java
  • 详解c++中对二维数组下标[][]的重载

    首先定义一个矩阵类,我用一个二维数组存储矩阵中的数据,矩阵详细定义如下

    class Matrix
    {
    public:
        Matrix(int rows, int cols)
        {
            _rows = rows;
            _cols = cols;
            array = new int*[rows];
            for (int i = 0; i < rows;i++)
            {
                array[i] = new int[cols];
            }
        }
        ~Matrix()
        {
            for (int i = 0; i < _rows;i++)
            {
                delete[] array[i];
            }
            delete[] array;
        }
        //重载[]符号
        int* operator[](int row)
        {
            return array[row];
        }
    private:
        int _rows;
        int _cols;
        int** array;
    };

     试一试效果,能程序能不能执行成功

    //试一试效果
    int main()
    {
        Matrix mat(3, 4);
        mat[1][1] = 1;
        cout << mat[1][1] << endl;
    }

     结果:

    解惑:

    我的同学可能会有疑惑:明明只重载了一个"[]",可是在使用的时候用的却是"[][]",为何程序能够执行成功?

    我一开始就是这么想的,想了好久,最后终于灵机一动,知道了原因,如下:

        //mat[1][1] = 1;        //我们可以把这一句分为两句
        //step1
        int* p = mat[1];        //此处等号右边返回的就是array[1]的地址,用到了操作符重载,p是一个指向int类型对象的指针
        //step2
        p[1] = 1;                //此处没有用到操作符重载,别忘了,[]符号本身就对指针具有提领作用
  • 相关阅读:
    16 Errors and Exceptions
    13 Asynchronous Programming
    wpf入门
    iframe cross domain
    ini_set("error_log",$error_path)设置
    MySQL中merge表存储引擎用法
    php中静态属性静态方法的用法
    PHP的SESSIONID生成原理
    composer的基本 使用
    相邻省份数组
  • 原文地址:https://www.cnblogs.com/XiaoXiaoShuai-/p/10753787.html
Copyright © 2011-2022 走看看