重載二維陣列的[] 運算子
運算子重載允許程式設計師擴充現有運算子的功能,以便為二算符維數組創建自訂行為他們的類別和物件。常見的用例是重載 [] 運算子以存取陣列的元素。但是,是否可以重載 [] 運算子兩次,從而有效地建立二維數組?
[] 運算子的雙重重載
是的,這是可能的多次重載 [] 運算子以實現二維數組行為。透過定義一個 [ ] 運算子來傳回一個本身可以處理 [ ] 索引的對象,您可以建立一個類似陣列的巢狀結構。
範例程式碼
考慮以下程式碼範例:
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; };
在此程式碼中,ArrayOfArrays 類別表示一個二維陣列。 [ ] 運算子重載兩次:
用法
要使用ArrayOfArrays 類,您可以對其進行兩次索引,就像它是常規二維數組一樣:
ArrayOfArrays aoa; aoa[3][5]; // Access the element at row 3, column 5
此程式碼將首先呼叫 ArrayOfArrays 實例上的 [ ] 運算符,該運算符將傳回一個 Proxy 物件第 3 行。然後,它將呼叫 Proxy 物件上的 [ ] 運算符,該運算符將傳回第 3 行第 5 列的元素。
透過實作 [ ] 運算子的雙重重載,您可以模擬行為二維陣列並為更複雜的資料儲存和檢索場景建立巢狀結構。
以上是您可以在 C 中重載兩次 [] 運算子來建立二維數組嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!