| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Проблемы с использованием класса |
| Автор: TBIKC 22.8.2011, 19:37 | ||||
| Задача Водителям не безразличен пробег их авто. Один водитель записал свои данные о нескольких заправках, записывая пройденные км и число залитых в бак литров бензина Разработайте программу, которая используя оператор while вводила бы пробег в км. и объём бензина в каждой заправке( пока не будет введено контрольное значение "-1" ). Программа должна показывать общий пробег и сколько потрачено бензина Я реализовал интерфейс и класс, а как задействовать в самом цикле что то не могу понять Ведь если я напишу в main.cpp так savings One(2,16); То у меня уже будут введены значения ... Помогите пожалуйста
|
| Автор: Чoо 22.8.2011, 20:53 | ||||
если с этим классом (не переделывая его), то примерно так можно сделать (может ошибки будут, пишу навскидку, но мысль думаю будет понятна):
только пара моментов: - конструктор ни при каких условиях не должен, да и не может быть приватным - в вашем классе все методы приватны, толку от него? - там где я вызываю из своего кода методы, эти методы сделайте паблик, иначе не вызовутся ну и потом.. Класс, который бы решал задачу должен быть самодостаточным, тоесть вся прогармма должна выглядеть примерно так (модуль маин):
все остальное, по заполнению, выделению и освобождению памяти должен делать класс. ну я так думаю Добавлено @ 20:54 да... и еще такой момент.. не думаю, что вызов методов класса из его же конструктора - хорошая идея. Поправьте меня пожалуйста, так как не уверен.. |
| Автор: Чoо 22.8.2011, 23:08 |
| mes, почему это плохо? |
| Автор: mes 22.8.2011, 23:12 | ||||||
и ни капли логики внутри.. что толку то (в данном случае) от этих сетеров и гетеров ? только лишняя писанина.. Добавлено через 2 минуты и 13 секунд потому то что должна быть гибкость, а если Ваша фраза восприниамется, как "давайте запихнем все что может понадобится в наш класс".. гибкости в таком случае ноль, как впрочем становится непонятным зачем вообще нужно деление на классы.. Добавлено через 5 минут и 19 секунд
это относится к виртуальным методам из за особенностей их поведения.. Добавлено через 10 минут и 46 секунд
явно не C++ .. |
| Автор: Чoо 22.8.2011, 23:24 | ||
| соглашусь.. Однако, применительно этой задаче, для хранения инфомрации заправка/пробег, можно было бы создать внутри класса указатель на массив этих данных и методами этого же класса выделять память под данные. Сам же указатель, для гибкости, оставить в секции public. ввод данных - да.. можно и вынести в основное приложение.. Всё остальное (впринципе что там, остается только вывести суммарные затраты бензина и суммарный пробег) оставить внутри класса. При необходимости что дополнить, создать класс/наследник, хотя дл яэтого примера это наврядли нужно.. Добавлено через 9 минут и 17 секунд ну вместо printf можно и std::in >> r >> g использовать Добавлено через 9 минут и 46 секунд вместо malloc/realloc - new Добавлено через 14 минут и 16 секунд
будут вызваны при несуществующем объекте? |
| Автор: mes 22.8.2011, 23:42 | ||
дело не в printfe, а в подходе.. Добавлено через 57 секунд можно и не в опсновное, главное что раздные задачи должны осуществляться разными сущностями.. Добавлено через 1 минуту и 36 секунд
для этого примера вообще классы не нужны.. |
| Автор: Чoо 22.8.2011, 23:44 |
честно говоря с данным классом ничего другого я не увидел :( |
| Автор: mes 22.8.2011, 23:47 |
он (метод) в конструкторе и деструкторе будет вызван "не виртуально" |
| Автор: Чoо 22.8.2011, 23:48 |
| единственное что, только то, что память можно было бы выделять не по 4 байта, а скажем по 400, а потом лишнюю вернуть (realloc вроде выделяет новую память, копирует содержимое старой и удаляет старую) |
| Автор: mes 22.8.2011, 23:54 |
начиная от того, что зачем с объявлена как указатель на указатель, и кончая realoc`ом и фактически каждая другая строчка не свойственна С++.. |
| Автор: Чoо 23.8.2011, 00:01 |
| в принципе да.. можно было обойтись просто указателем.. данные все-равно последовательно размещаются.. что-то я не подумал.. соответственно каждые 16 байт будет новая пара пробег/расход |
| Автор: mes 23.8.2011, 00:21 | ||||
ну так по условию, массив совсем не нужен..
записывал то водитель у себя на листочке, а не в программе Добавлено @ 00:22 т.е. нужно всего лишь что то типа :
|
| Автор: Чoо 23.8.2011, 00:47 |
вот же ж совсем я думать разучился |
| Автор: mes 23.8.2011, 08:41 | ||
можно и с накоплением результата, например так :
|
| Автор: TBIKC 23.8.2011, 10:17 | ||
Всем спасибо, сделал вот так вот
|
| Автор: Чoо 23.8.2011, 11:03 |
mes, честно говоря, "vector" я еще не изучал.. что-то как-то анчал заниматься программированием, потом началась сессия и стало не до него. Потом всё забыл и вот щас опять начал вспоминать ![]() Добавлено через 3 минуты и 2 секунды TBIKC, на 47й строке маловероятно, что при входе в цикл сount будет равно -1, но все же это возможно Добавлено через 5 минут и 45 секунд строки 41 - 45. лишние действия, кажется. Оптимальное решение предложено mes, только это еще надо в класс обернуть |
| Автор: mes 23.8.2011, 11:22 |
| Автор: xvr 23.8.2011, 11:24 | ||
Может, равно как и деструктор. Но явно не в этой задаче |
| Автор: Чoо 23.8.2011, 13:19 |
как же он будет вызываться, если он может вызываться только методами класса? |
| Автор: mes 23.8.2011, 13:22 | ||
Вы забыли про друзей Добавлено через 53 секунды а зачем ? требовалось по заданию ? |
| Автор: Чoо 23.8.2011, 14:09 |
аа.. точно.. условие задачи у меня перемешалось с названием темы.. да.. точно |