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++ 重载运算符 [ ][ ]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Prevent class inheritance in C++(防止 C++ 中的类继承)
Why should I declare a virtual destructor for an abstract class in C++?(为什么要在 C++ 中为抽象类声明虚拟析构函数?)
Why is Default constructor called in virtual inheritance?(为什么在虚拟继承中调用默认构造函数?)
C++ cast to derived class(C++ 转换为派生类)
C++ virtual function return type(C++虚函数返回类型)
Is there any real risk to deriving from the C++ STL containers?(从 C++ STL 容器派生是否有任何真正的风险?)