Operator[][] overload(运算符[][] 重载)
问题描述
是否可以重载 [] 运算符两次?为了允许,像这样:function[3][3](就像在二维数组中).
Is it possible to overload [] operator twice? To allow, something like this: function[3][3](like in a two dimensional array). 
如果可能的话,我想看看一些示例代码.
If it is possible, I would like to see some example code.
推荐答案
你可以重载 operator[] 来返回一个你可以再次使用 operator[] 的对象得到结果.
You can overload operator[] to return an object on which you can use operator[] again to get a result.
class ArrayOfArrays {
public:
    ArrayOfArrays() {
        _arrayofarrays = new int*[10];
        for(int i = 0; i < 10; ++i)
            _arrayofarrays[i] = new int[10];
    }
    class Proxy {
    public:
        Proxy(int* _array) : _array(_array) { }
        int operator[](int index) {
            return _array[index];
        }
    private:
        int* _array;
    };
    Proxy operator[](int index) {
        return Proxy(_arrayofarrays[index]);
    }
private:
    int** _arrayofarrays;
};
然后你可以像这样使用它:
Then you can use it like:
ArrayOfArrays aoa;
aoa[3][5];
这只是一个简单的例子,你想添加一堆边界检查和东西,但你明白了.
This is just a simple example, you'd want to add a bunch of bounds checking and stuff, but you get the idea.
这篇关于运算符[][] 重载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:运算符[][] 重载
				
        
 
            
        基础教程推荐
- C++结构和函数声明。为什么它不能编译? 2022-11-07
 - 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
 - 在 C++ 中计算滚动/移动平均值 2021-01-01
 - 如何在 C++ 中初始化静态常量成员? 2022-01-01
 - 这个宏可以转换成函数吗? 2022-01-01
 - 我有静态或动态 boost 库吗? 2021-01-01
 - 如何通过C程序打开命令提示符Cmd 2022-12-09
 - 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
 - 如何检查GTK+3.0中的小部件类型? 2022-11-30
 - 常量变量在标题中不起作用 2021-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
						
						
						
						
						
				
				
				
				