C++ 重载运算符 [ ][ ]

C++ overload operator [ ][ ](C++ 重载运算符 [ ][ ])

本文介绍了C++ 重载运算符 [ ][ ]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 CMatrix 类,其中是指向值数组的双指针".

I have class CMatrix, where is "double pointer" to array of values.

class CMatrix {
public:
    int rows, cols;
    int **arr;
};

我只需要通过键入以下内容来访问矩阵的值:

I simply need to access the values of matrix by typing:

CMatrix x;
x[0][0] = 23;

我知道如何使用:

x(0,0) = 23;

但我真的需要以另一种方式做到这一点.任何人都可以帮助我吗?请?

But I really need to do that the other way. Can anyone help me with that? Please?

最后感谢大家的帮助,我是这样做的...

Thank you guys for help at the end I did it this way...

class CMatrix {
public:
   int rows, cols;
   int **arr;

public:
   int const* operator[]( int const y ) const
   {
      return &arr[0][y];
   }

   int* operator[]( int const y )
   {
      return &arr[0][y];
   }

   ....

感谢您的帮助,我真的很感激!

Thank you for your help I really appreciate it!

推荐答案

你不能重载operator [][],但这里常用的习惯用法是使用代理类, 即重载 operator [] 以返回重载了 operator [] 的不同类的实例.例如:

You cannot overload operator [][], but the common idiom here is using a proxy class, i.e. overload operator [] to return an instance of different class which has operator [] overloaded. For example:

class CMatrix {
public:
    class CRow {
        friend class CMatrix;
    public:
        int& operator[](int col)
        {
            return parent.arr[row][col];
        }
    private:
        CRow(CMatrix &parent_, int row_) : 
            parent(parent_),
            row(row_)
        {}

        CMatrix& parent;
        int row;
    };

    CRow operator[](int row)
    {
        return CRow(*this, row);
    }
private:
    int rows, cols;
    int **arr;
};

这篇关于C++ 重载运算符 [ ][ ]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:C++ 重载运算符 [ ][ ]

基础教程推荐