Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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 в многопоточной среде, то все вопросы синхронизации на твоей совести.
Если бы это было действительно только так и ничего более, то никто не стал бы его изобретать ![]() |