2015-11-26 58 views
3

我有下面的類集合運算:[]運算符重載get和C++中

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],但這個定義我得到的錯誤消息「期望標識符」。

回答

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];  
} 
5

operator[]是一個功能回吐INT

operator[](int addr) 

返回到const char

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

也就是說長度9

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

的數組的引用

& operator[](int addr) 

,不這樣做。使用typedef s到簡化:

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);