Rumah > pembangunan bahagian belakang > C++ > Bolehkah Anda Membebankan Operator [] Dua Kali untuk Mencipta Tatasusunan Dua Dimensi dalam C?

Bolehkah Anda Membebankan Operator [] Dua Kali untuk Mencipta Tatasusunan Dua Dimensi dalam C?

Patricia Arquette
Lepaskan: 2024-12-31 13:37:11
asal
400 orang telah melayarinya

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

Melebihi muatan Operator [] untuk Tatasusunan Dua Dimensi

Pemuatan berlebihan operator membolehkan pengaturcara memperluaskan fungsi operator sedia ada untuk mencipta gelagat tersuai untuk kelas dan objek mereka. Satu kes penggunaan biasa ialah membebankan operator [] untuk mengakses elemen tatasusunan. Walau bagaimanapun, adakah mungkin untuk membebankan operator [] dua kali, dengan berkesan mencipta tatasusunan dua dimensi?

Pemuatan Ganda Berganda bagi [] Operator

Ya, mungkin untuk membebankan operator [] beberapa kali untuk mencapai tingkah laku tatasusunan dua dimensi. Dengan mentakrifkan satu pengendali [ ] untuk mengembalikan objek yang sendiri boleh mengendalikan pengindeksan [ ], anda boleh mencipta struktur seperti tatasusunan bersarang.

Kod Contoh

Pertimbangkan contoh kod berikut:

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;
};
Salin selepas log masuk

Dalam kod ini, kelas ArrayOfArrays mewakili dua dimensi tatasusunan. Pengendali [ ] dibebankan dua kali:

  1. Lebihan pertama mengembalikan objek Proksi apabila disediakan dengan indeks.
  2. Kelas Proksi melebihkan operator [ ] sekali lagi untuk mendapatkan semula elemen daripada yang mendasari tatasusunan.

Penggunaan

Untuk menggunakan kelas ArrayOfArrays, anda boleh mengindeksnya dua kali seolah-olah ia tatasusunan dua dimensi biasa:

ArrayOfArrays aoa;
aoa[3][5];  // Access the element at row 3, column 5
Salin selepas log masuk

Kod ini mula-mula akan menggunakan operator [ ] pada contoh ArrayOfArrays, yang akan mengembalikan Objek proksi untuk baris 3. Kemudian, ia akan memanggil pengendali [ ] pada objek Proksi, yang akan mengembalikan elemen pada lajur 5 dalam baris 3.

Dengan melaksanakan lebihan gandaan pengendali [ ], anda boleh simulasikan gelagat tatasusunan dua dimensi dan buat struktur bersarang untuk senario penyimpanan dan pengambilan data yang lebih kompleks.

Atas ialah kandungan terperinci Bolehkah Anda Membebankan Operator [] Dua Kali untuk Mencipta Tatasusunan Dua Dimensi dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan