| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Перегрузка оператора. |
| Автор: Guest_Andrei 22.5.2003, 23:22 |
| У меня есть класс где данные хранятся в линейном массиве. Я хотелбы с помощью перегрузки оператора (наверное это должен быть operator[]) обращаться к классу как к двух-мерному массиву (object[][]). Как сделать эту перегрузку? Меня интересует сам синтаксис. Спасибо огромное тому кто может помочь! |
| Автор: man2002ua 23.5.2003, 09:44 |
| А почему двумерному и что будет в качестве измерений массива. И размерность массива? |
| Автор: setq 23.5.2003, 11:18 |
| может быть так #define ROWSIZE 10 #define COLSIZE 15 class my_class { int array [COLSIZE * ROWSIZE], *pointer; public: my_class& operator [] (int n) { static bool is_firstcall = true; if (is_firstcall) pointer = array + n * ROWSIZE; else pointer += n; is_firstcall = ! is_firstcall; return *this; } operator int () {return *pointer;} void operator = (int n) { if (pointer) *pointer = n; } }; но использовать придётся с кастингом: my_class c; c [6][3] = 666; int n = (int) c [6][3]; не проверял |
| Автор: setq 23.5.2003, 11:21 |
| а, вообще, проще надо быть. проще |
| Автор: TimPP 23.5.2003, 11:28 |
| Возьми стандартный STL класс vector отнаследуйся от него и не парь мозги! Для двугмерных масивов вложи vector в vector. |
| Автор: Unregistered 23.5.2003, 16:54 | ||
Прикольно: int n = (int) c [6][3][6]; |
| Автор: Unregistered 23.5.2003, 17:03 | ||
По граммотному так:
В остальном надеюсь понятно. Лучше сразу шаблон сделать. А насчет STL Vector, советую посмотреть его реализацию. Я бы в критических кодах им не пользовался. |
| Автор: Fantasist 23.5.2003, 18:01 | ||
У Страуструпа подобная вещь хорошо описанна. Slice-ами они называют ее. Типа:
Конечно, эта реализация примитивна, но идея такова. |
| Автор: RAN 23.5.2003, 20:57 | ||
Это вы о чём? |
| Автор: DENNN 23.5.2003, 20:59 |
| Вероятно о многопоточности. |
| Автор: TimPP 27.5.2003, 16:39 |
| Не понял на счет многопоточности. Может здесь есть любители реализации MFC контейнеров. Но, STL библиотека писалась докторами наук в программировании. А vector, есть ничто иное как указатель на масив, все вокруг это мишура ( хоть и реализована Microsoft ). Просто и удобно! |
| Автор: DENNN 27.5.2003, 19:41 | ||||
Это значит что нормальная работа контейнеров гарантированна только в одно поточной среде. Если ты хочешь использоывать STL в многопоточной среде, то все вопросы синхронизации на твоей совести.
Если бы это было действительно только так и ничего более, то никто не стал бы его изобретать |