2016-11-26 27 views
-3

如何重載C++中的[]運算符。我基本上想訪問One-D數組的索引並返回它。我試過這樣做,但似乎沒有產生預期的結果。我該如何重載[]運算符?

Square Square::operator [](const Square& temp) 
{ 
    Square obj; //creates a Square class object. 

    for(int i=0;i<dimension;i++) 
    { 
     *obj.board = temp.board[i]; 

    } 
return obj; 

} 
+2

看起來像您正在使用[]作爲返回新對象的複製操作符。你想要的是得到一個索引,我,並返回this.board [我]。假設this.board存在。 – kabanus

+2

編譯所有警告和調試信息('g ++ -Wall -g'),然後**使用調試器**(''gdb')。你的錯誤可能在其他地方(也有'臨時',這是索引,是一個'Square'看起來很奇怪) –

+0

如果'Square'包含你想訪問的數組,那麼你基本上需要一個pass-through操作符, '運算符[]'爲普通數組。這意味着它應該採用索引,返回對實際數組元素類型的引用,並在內部使用數組的'operator []'。 –

回答

1

請確保您有各種各樣的在你Square類的數組,那麼你的下標超載會是這個樣子

Square& Square::operator[] (const int index) 
{ 
    // checks if index is >= to zero AND less than your array size 
    assert(index >= 0 && index < yourArray.size()); 
    return yourArray[index]; 
} 

更多信息上assert

PS:這個工程下假設您將創建一個數組Square。如果不是,則分別更新方法簽名。

+1

建議快速解釋assert的作用,並可能鏈接到信譽良好的文檔頁面以獲取更多詳細信息。 – user4581301