首頁 > 後端開發 > C++ > 您可以在 C 中重載兩次 [] 運算子來建立二維數組嗎?

您可以在 C 中重載兩次 [] 運算子來建立二維數組嗎?

Patricia Arquette
發布: 2024-12-31 13:37:11
原創
343 人瀏覽過

Can You Overload the [] Operator Twice to Create a Two-Dimensional Array in C  ?

重載二維陣列的[] 運算子

運算子重載允許程式設計師擴充現有運算子的功能,以便為二算符維數組創建自訂行為他們的類別和物件。常見的用例是重載 [] 運算子以存取陣列的元素。但是,是否可以重載 [] 運算子兩次,從而有效地建立二維數組?

[] 運算子的雙重重載

是的,這是可能的多次重載 [] 運算子以實現二維數組行為。透過定義一個 [ ] 運算子來傳回一個本身可以處理 [ ] 索引的對象,您可以建立一個類似陣列的巢狀結構。

範例程式碼

考慮以下程式碼範例:

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 類別表示一個二維陣列。 [ ] 運算子重載兩次:

  1. 第一次重載在提供索引時傳回一個 Proxy 物件。
  2. Proxy 類別再次重載[ ] 運算子以從潛在的

用法

要使用ArrayOfArrays 類,您可以對其進行兩次索引,就像它是常規二維數組一樣:

ArrayOfArrays aoa;
aoa[3][5];  // Access the element at row 3, column 5
登入後複製

此程式碼將首先呼叫 ArrayOfArrays 實例上的 [ ] 運算符,該運算符將傳回一個 Proxy 物件第 3 行。然後,它將呼叫 Proxy 物件上的 [ ] 運算符,該運算符將傳回第 3 行第 5 列的元素。

透過實作 [ ] 運算子的雙重重載,您可以模擬行為二維陣列並為更複雜的資料儲存和檢索場景建立巢狀結構。

以上是您可以在 C 中重載兩次 [] 運算子來建立二維數組嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板