![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| albertn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Я хочу написать класс для работы с многомерным массивом например double.
По-идее в каждом классе должен быть массив объектов того-же класса, и так до последнего объекта. При такой структуре нет проблем в переопределении оператора []. Но возникает загвоздка - что делать с последним объектом, ведь он должен по оператору [] возвращать не объект, а число типа double. Значит мне придестся создавать другой класс, который содержит не другие объекты, а числа. Но для универсальности один класс должен быть унаследован у другого, или они должны будут унаследованны у другого класса. Но тем не менее что там, что там есть переопределенный оператор [], но возвращает он не одно и тоже. Посоветуйте как быть в этом случае. |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Не совсем понял почему так. Во-первых, если интерес практический, а не теоретический, то есть готовый boost::multi_array Во-вторых можно переопределить operator()() и с ним обращение к массиву можно реализовать как arr(1,2,4)=5; В-третьих можно сделать operator[](Index i), и вызывать как arr[Index(1,2,4)]=4; -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| albertn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Немного опишу мою цель: Мне нужен класс для работы с тензорами, причем операции могут выполняться нестандартно. Обязательно необходим полный контроль над происходящим (никаких непонятных функций). Желательно переопределить стандартные операторы (+ - *). Также желательно, чтобы у любого тензора можно было выдернуть "хвостовую часть" тензора без особых проблем (к примеру так B = A[3]). Так-же желательно, чтобы можно было обращаться к элементам тензора в естественной для языка форме. Тензор будет неопределенной размерности (возможно даже переменной). По-этому мне показалась наиболее оптимальной списочная структура. Но опять же возвращаюсь к "нашим баранам". Если же использовать два класса, то в одном из них должны содержаться объекты того-же класса. А чтобы в эту же переменную запихнуть объект другого класса, то надо, чтоб кто-то кого-то наследовал. Если не так, то поправьте меня. А использование одного класса может вызвать затруднение. Я попробывал переопределить опрератор присваивания от типа double, и вроде все стало нормально работать. Но все-равно чувствую, что сделать можно было-бы лучше. За boost::multi_array спасибо, но времени на то, чтоб разбираться как его правильно унаследовать, и работать с ним имхо потребуется больше, чем написать что-то свое. К тому-же мне не нужно ничего такого громосткого, а все остальное все-равно дописывать придется. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
void* ? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| albertn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
А дальше? Как потом определить какого он класса? Придется тогда помечать в другой переменной, а это изврат. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
а при наследовании придется сначала выделить интерфейс Добавлено @ 15:10 чем мой вариант выше не нравиться - динамический массив произвольной размерности его можно инкапсулировать в класс и переопределить нужные операторы -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| albertn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Я уже написал, что сделал с одним классом, что оказалось проще, чем оба этих варианта, но по-моему осталась какой-то некрасивой.
Честно говоря я не хотел связываться с векторами, т.к. прога возможно будет использоваться в досовских приложениях (хотя и врятли) |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
albertn, может покажешь свой вариант.
|
|||
|
||||
| albertn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 368 Регистрация: 17.7.2006 Где: г. Ставрополь Репутация: нет Всего: 34 |
Вот мой код:
Пока сыроват, но главное работает. Это сообщение отредактировал(а) albertn - 11.9.2006, 09:10 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |