| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Массив в класс |
| Автор: albertn 6.9.2006, 11:52 |
| Я хочу написать класс для работы с многомерным массивом например double. По-идее в каждом классе должен быть массив объектов того-же класса, и так до последнего объекта. При такой структуре нет проблем в переопределении оператора []. Но возникает загвоздка - что делать с последним объектом, ведь он должен по оператору [] возвращать не объект, а число типа double. Значит мне придестся создавать другой класс, который содержит не другие объекты, а числа. Но для универсальности один класс должен быть унаследован у другого, или они должны будут унаследованны у другого класса. Но тем не менее что там, что там есть переопределенный оператор [], но возвращает он не одно и тоже. Посоветуйте как быть в этом случае. |
| Автор: MAKCim 6.9.2006, 21:11 | ||
|
| Автор: albertn 7.9.2006, 09:53 |
Немного опишу мою цель: Мне нужен класс для работы с тензорами, причем операции могут выполняться нестандартно. Обязательно необходим полный контроль над происходящим (никаких непонятных функций). Желательно переопределить стандартные операторы (+ - *). Также желательно, чтобы у любого тензора можно было выдернуть "хвостовую часть" тензора без особых проблем (к примеру так B = A[3]). Так-же желательно, чтобы можно было обращаться к элементам тензора в естественной для языка форме. Тензор будет неопределенной размерности (возможно даже переменной). По-этому мне показалась наиболее оптимальной списочная структура. Но опять же возвращаюсь к "нашим баранам". Если же использовать два класса, то в одном из них должны содержаться объекты того-же класса. А чтобы в эту же переменную запихнуть объект другого класса, то надо, чтоб кто-то кого-то наследовал. Если не так, то поправьте меня. А использование одного класса может вызвать затруднение. Я попробывал переопределить опрератор присваивания от типа double, и вроде все стало нормально работать. Но все-равно чувствую, что сделать можно было-бы лучше. За boost::multi_array спасибо, но времени на то, чтоб разбираться как его правильно унаследовать, и работать с ним имхо потребуется больше, чем написать что-то свое. К тому-же мне не нужно ничего такого громосткого, а все остальное все-равно дописывать придется. |
| Автор: MAKCim 7.9.2006, 14:57 | ||
void* ? |
| Автор: albertn 7.9.2006, 15:00 | ||
А дальше? Как потом определить какого он класса? Придется тогда помечать в другой переменной, а это изврат. |
| Автор: MAKCim 7.9.2006, 15:07 | ||
а при наследовании придется сначала выделить интерфейс Добавлено @ 15:10 чем мой вариант выше не нравиться - динамический массив произвольной размерности его можно инкапсулировать в класс и переопределить нужные операторы |
| Автор: albertn 7.9.2006, 16:38 | ||
Я уже написал, что сделал с одним классом, что оказалось проще, чем оба этих варианта, но по-моему осталась какой-то некрасивой.
Честно говоря я не хотел связываться с векторами, т.к. прога возможно будет использоваться в досовских приложениях (хотя и врятли) |
| Автор: likehood 7.9.2006, 17:39 |
| albertn, может покажешь свой вариант. |
| Автор: albertn 11.9.2006, 09:09 | ||
Вот мой код:
Пока сыроват, но главное работает. |