[]运算符重载以c ++

时间:2015-11-26 10:50:03

标签: c++ arrays reference operator-overloading

我正在上课:

class mem
{
private:
    char _memory[0x10000][9];

public: 
    const (&char)[9] operator [] (int addr);    
}

我的目标是能够像数组一样使用mem类,而后期实现会更复杂。所以,我应该能够

  • 像'mem [0x1234]'一样访问它以返回对9个字符数组的引用
  • 写入'mem [0x1234] =“12345678 \ 0”;'

这就是我的尝试:

#include "mem.h"

const (&char)[9] mem::operator [] (int addr)
{
    return &_memory[addr];
}

但是,它说方法“必须有一个返回值”,我认为我已将其定义为(&char)[9],但作为此定义,我收到错误消息“expect a identifier”。

2 个答案:

答案 0 :(得分:5)

operator[]是一个采用int

的函数
operator[](int addr)

返回引用

& operator[](int addr)

到长度为9的数组

(&operator[](int addr))[9]
const char

const char (&operator[](int addr))[9]

那就是说,不要这样做。使用typedef来简化:

typedef const char (&ref9)[9];
ref9 operator[](int addr);

那就是说,也不要这样做。

std::array<std::array<char, 9>, 0x10000> _memory;
const std::array<char, 9>& operator[](int addr);

答案 1 :(得分:3)

写下面的方式

#include "mem.h"

const char ( & mem::operator [] (int addr) const )[9]
{
    return _memory[addr];
}

你也可以添加一个非常数运算符

char ( & mem::operator [] (int addr) )[9]
{
    return _memory[addr];
}

类定义看起来像

class mem
{
private:
    char _memory[0x10000][9];

public: 
    const char ( & operator [] (int addr) const )[9];    
    char ( & operator [] (int addr) )[9];    
}