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; };
Dalam kod ini, kelas ArrayOfArrays mewakili dua dimensi tatasusunan. Pengendali [ ] dibebankan dua kali:
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
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!