![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Guest_Andrei |
|
|||
Unregistered |
У меня есть класс где данные хранятся в линейном массиве.
Я хотелбы с помощью перегрузки оператора (наверное это должен быть operator[]) обращаться к классу как к двух-мерному массиву (object[][]). Как сделать эту перегрузку? Меня интересует сам синтаксис. Спасибо огромное тому кто может помочь! |
|||
|
||||
man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
А почему двумерному и что будет в качестве измерений массива. И размерность массива?
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
setq |
|
|||
Unregistered |
может быть так
#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 |
|
|||
Unregistered |
а, вообще, проще надо быть. проще
![]() ![]() ![]() |
|||
|
||||
TimPP |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 22.5.2003 Репутация: нет Всего: нет |
Возьми стандартный STL класс vector отнаследуйся от него и не парь мозги! Для двугмерных масивов вложи vector в vector.
Это сообщение отредактировал(а) TimPP - 23.5.2003, 11:30 |
|||
|
||||
Unregistered |
|
|||
Unregistered |
Прикольно: int n = (int) c [6][3][6]; |
|||
|
||||
Unregistered |
|
|||
Unregistered |
По граммотному так:
В остальном надеюсь понятно. Лучше сразу шаблон сделать. А насчет STL Vector, советую посмотреть его реализацию. Я бы в критических кодах им не пользовался. |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
У Страуструпа подобная вещь хорошо описанна. Slice-ами они называют ее. Типа:
Конечно, эта реализация примитивна, но идея такова. -------------------- Волны гасят ветер... |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Это вы о чём? |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Вероятно о многопоточности.
|
|||
|
||||
TimPP |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 22.5.2003 Репутация: нет Всего: нет |
Не понял на счет многопоточности.
Может здесь есть любители реализации MFC контейнеров. Но, STL библиотека писалась докторами наук в программировании. А vector, есть ничто иное как указатель на масив, все вокруг это мишура ( хоть и реализована Microsoft ). Просто и удобно! |
|||
|
||||
DENNN |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Это значит что нормальная работа контейнеров гарантированна только в одно поточной среде. Если ты хочешь использоывать STL в многопоточной среде, то все вопросы синхронизации на твоей совести.
Если бы это было действительно только так и ничего более, то никто не стал бы его изобретать ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |