| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C++] STL и свои типы данных |
| Автор: cupper 19.4.2007, 15:00 | ||||
| Вобщем поробую выложить кратко суть проблемы: мне нуно использовать шаблон List со своим типом данных, а я незнаю че нужно переопределять и как ваще ето все замутить. Как работать в STL с стандартыми типами данных немного разбрался. Вот есть к примеру *.h файл с моим классом
все методы этом класе реализованы и протестированы. Кстати если че то они реализованы для обычного использование, не для STL или нет разници. . Нужноли чтонибуть еще сюда или может чтото убрать ваще надо???. Вот на что меня хватило
И вообще хоть штото сдесь есть правильное или я может ваще все неправильно понял P.S. если у кого есть простые реализованные примеры по моему вопросу дайте плиз, мне на примерах легче понять чем в книжке. |
| Автор: boriska 19.4.2007, 15:36 | ||
перегрузи operator<< |
| Автор: Daevaorn 19.4.2007, 15:37 | ||
Ну для начала нужно подключить заголовок <iterator>. И перегрузить оператор выведения в поток, что-то типа того:
|
| Автор: EnergoHokum 20.4.2007, 12:47 | ||
Нужно перегрузить: конструктор по умолчанию, конструктор копий, если будет, то конструктор с параметрами, определить виртуальный деструктор, перегрузить оператор присваивания. Дальше - зависит от того, что ты планируешь делать со своим классом, арифметические операторы, operator >>, operator << ну и далее по вкусу. Для твоего класса приблизительно так:
А вообще почитай Элджера, C++ для профессионалов, там и не такое описано. Для использования в STL ничего специального делать не нужно. |
| Автор: HappyLife 20.4.2007, 13:24 | ||||
Хех, на мой взгляд проще в классе сделать функтор. InStream(ostream& stream); |
| Автор: Daevaorn 20.4.2007, 13:46 | ||
и что? |
| Автор: HappyLife 20.4.2007, 15:14 |
| Daevaorn, да так) Личный опыт. |
| Автор: Daevaorn 20.4.2007, 16:09 | ||
а как тогда с std::copy и std::ostream_iterator использовать? вопрос то был именно в этом |
| Автор: JackYF 20.4.2007, 16:21 |
лучше писать нестандартные функторы с нестандартными именами?.. (имхо) |
| Автор: Earnest 20.4.2007, 20:51 |
| cupper, Я правильно понимаю, что в классе hist_event выделяется динамическая память для even, а потом, в деструкторе, уничтожается? Если так, то тебя ждут увлекательные приключения при использовании контейнеров STL. Объекты, которые можно класть в контейнеры STL, дожны непременно обладать одним свойством: быть copy-constructable. Потому что копирование там на каждом шагу - да хоть взять push_back. А твой объект таковым не является. И самое печальное, что компилятор сгенерирует тебе конструктор копирования без звука... Он просто скопирует твой указатель... Дальше надо? А вы беспокоитесь о выводе в поток... Да он просто может не дожить... |
| Автор: cupper 24.4.2007, 10:36 | ||||||||||||||||||
Если меня не подводит память то конструктор по умолчанию, конструктор копирования и конструктор присваивания у мну есть:
Еще раз повторю все ети методы реализованы и протестированы!!!!!!!
Добавлено через 14 минут и 26 секунд
ДА!!!!!! есть указатель char* ... и в деструкторе она удалаяться!!!
Если я неошибаюсь то STL есть возмоность использовать свой тип данных, а раз есть возможность то нечего сверХ необычного недолжн быть
ДА Я ПЕРЕОПРЕДЕЛИЛ КОНСТРУКТОР КОПИРОВАНИЯ, ОН РАБОТАЕТ!!!!!!
ПОПРОБУЮ перефразировать свою просьбу: с учетом того что уменя уже реализовано, мне нуно 1) чтобы я мог кроме того как ввести свой список, так же мог его вывести 2) отсортировать по возростанию 3) имел возможность добавлять элементы 4) умел полностью очистить весь список 4) и еще один мотод который позволял бы находить средный интервал в годах между событиями |
| Автор: Earnest 24.4.2007, 19:24 | ||||
Извини, твой код особо не смотрела. Ясно, что корректных (в смысле безопасности) вариантов копирования только 2: глубокое копирование и подсчет ссылок. Первый вариант несколько избыточен - выделять память, чтобы немного подвигать элементы, и потом тут же удалить - это как-то... нерентабельно, что ли. Но дело вкуса. И работать будет, если не очень критична производительность. Второй вариант неудобно реализовывать с "голым" указателем. Для этого есть смарт-пойнтеры. Что и рекомендую.
Только copy-constructable. Причем корректность копирования полностью на твоей совести. Использование STL все-таки предполагает некоторое понимание процесса, как и C++ в целом. И вообще, С++ - это язык, где зад программисту не подтирают: предполагается, что он уже научился это делать сам. Извините за грубость, но иногда достает ... Добавлено через 7 минут и 32 секунды
Не бывает. Бывает конструктор копирования (у тебя тоже есть). А это оператор присваивания. Просто терминология, но тем не менее Добавлено через 8 минут и 42 секунды И еще, "правильный" оператор присваивания должен возвращать ссылку, а не копию. |
| Автор: cupper 25.4.2007, 09:51 | ||||
Люди, это программа моя курсовая которую нада сдавать через пол месяца, ведет ее у меня мой декан, пробиться к ней мне не получаеться уже чутли не месяц, так что она мне толком помочь не можетю. ВЫ последняя надежда для меня, я С++ знаю на уровне базового изучения
ПОМОГИТЕ ХОТЬ В ЧЕМТО , и пожалуйста не на словах, а если мона хотябы небольшие но конкретные примеры как это сделать |
| Автор: cupper 26.4.2007, 14:16 |
| всем большое спасибо (((((((( :'( |