Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Возможен ли класс строк, чтобы писать if(a+b==c) |
Автор: Ibragim 9.7.2008, 09:53 | ||
Всем день добрый. По поиску нашел похожие темы, но не совсем то что хотелось бы (http://forum.vingrad.ru/topic-215258.html, http://forum.vingrad.ru/topic-113518.html, http://forum.vingrad.ru/topic-122332.html), поэтому вынесу вопрос на оборзе^w обозрение. Итого задача. Чисто теоретическая, возможно ли такое в принципе. Необходимо создать такой класс работы со строками, чтобы с объектами класса можно было проводить подобные операции:
Перегрузка операторов сравнения и сложения - все понятно, но получается ТЕОРЕТИЧЕСКОЕ ограничение: Оператор + должен возвращать объект (или ссылку на объект, не важно), а поскольку b и с - строки - то получается что придется выделять память и создавать такой объект. Понятно, что это никуда не годится - ведь память останется не освобожденной для такого созданного объекта (a+b). Вот и вопрос - есть ли возможность корректно создать класс работы со строками, с объектами которого без дополнительных ухищрений можно будет проводить подобные операции? Я не вижу никакого варианта решения, так сказать, ввиду структуры языка, но я много чего не знаю, вот и спрашиваю. PS А, приложение имеет достаточно жесткие ограничения по размеру / кроссплатформенности / подключаемым библиотекам, то есть вопрос о том, как реализовать самому, а не в какой библиотеке есть что-то похоже. |
Автор: Ibragim 9.7.2008, 10:07 | ||
Да, спасибо, под std вариант мне знаком. Но хотелось бы узнать, реализуема ли проблема теоретически - ну например не для строк, а для других объектов, членами которых есть динамически выделяемые куски памяти. не правильно поскольку оператор + возвращает объект по значению, то он является стековым и удалится при достижении конца своего скопа м... да? а то что при сложении двух строк при реализации оператора сложения мне придется делать malloc()/new() тоже ничего? вроде не должен компилятор настолько умным быть ![]() |
Автор: Alek86 9.7.2008, 10:08 | ||||
если твой компилятор стандартен, то он обязан иметь возможность подключить string и я не уверен, что тебе самому получится сделать что-то более быстрое/удобное/кроссплатформенное/мелкое, чем std::string Добавлено @ 10:10
не, компилятор не должен но есть такая штука, как умные указатели std::auto_ptr, boost::shared_ptr... храни результат выделения памяти в них, и они в деструкторе удалят твой new (malloc в плюсах крайне нехорошо использовать) |
Автор: Ibragim 9.7.2008, 10:16 |
Понятно, то есть настоятельные рекомендации использовать std:: Ну что ж, спасибо, в любом случае практическую сторону вопроса так и будем решать. Если кто-то позже прочтет эту тему и знает как решить данный вопрос без std, очень прошу написать для общего развития. А пока спасибо Alek86, пометим как решенный. |
Автор: Alek86 9.7.2008, 10:23 | ||
и чем ему auto_ptr не понравился?... |
Автор: Daevaorn 9.7.2008, 10:44 | ||
И еще без использования компилятора С++ и компьютера, так, для общего развития;) |
Автор: xvr 9.7.2008, 11:26 | ||
Открою тебе великую тайну ![]() |
Автор: SteN 9.7.2008, 15:14 | ||
а что мешает в opertaor + создать объект? Память соответсвенно чистится в диструкторе...
ПС: код ужасен, знаю. Но суть,я думаю,передал. |