Przęciążanie operatora []
Ostatnio zmodyfikowano 2013-07-26 14:14
Szymko Temat założony przez niniejszego użytkownika |
Przęciążanie operatora [] » 2013-07-26 00:41:13 Otóż tak, chciałem zrobić opakowanie tablicy dwuwymiarowej np. takie: class CFoo { public: private: int tablica[ 10 ][ 10 ]; }
O ile wiem jak przeciążyć operator [] w przypadku gdyby tablica była jednowymiarowa to za nic nie mogę wymyślić jak to zrobić dla dwuwymiarowej, albo i wielowymiarowej. Chciałem żeby do opakowania można było się odnosić np. tak: CFoo Opakowanie; opakowanie[ 3 ][ 5 ] =
|
|
Admixior |
» 2013-07-26 00:56:01 Niech operator [] zwraca wskaźnik na tablice jednowymiarową int * operator []( int x ) { return tablica[ x ]; } |
|
Szymko Temat założony przez niniejszego użytkownika |
» 2013-07-26 01:22:36 No faktycznie, tylko, że wtedy nie zabezpieczę tej tablicy jednowymiarowej, zwracanej przez operator przed błędem przekroczenia indeksu. |
|
Matix8741 |
» 2013-07-26 10:06:53 Bo operator [] jest tylko i wyłącznie dwuargumentowy, jest tylko jeden operator który może przyjąć więcej argumentów i jest to operator (), więc tablice wielowymiarową może zrobić tak obiekt klasy( 4, 5, 2 ) |
|
jsc |
» 2013-07-26 10:40:50 Możesz ten pomysł z () szerzej omówić? |
|
Matix8741 |
» 2013-07-26 11:05:30 Robisz przeładowanie operatora () w taki sam sposób jak operatora [] tylko z wieloma argumentami np. jako funkcję składową klasy: int & operator ()( unsigned int jeden, unsigned int dwa, unsigned int trzy ) { return a[ jeden ][ dwa ][ trzy ]; } Chyba dobrze napisałem bo sam tego nie używałem, ale jest to omówione w "symfonii c++ Standard" Jerzego Grębosza. możesz nawet użyć argumentów domniemanych ;) |
|
Szymko Temat założony przez niniejszego użytkownika |
» 2013-07-26 14:14:26 Ok, dzięki wielkie. To mi wystarczy. |
|
« 1 » |