|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
||||||
Работа с абстрактным классом, считывание данных21.03.2019, 12:05. Показов 2636. Ответов 41
Метки нет (Все метки)
Здравствуйте, уважаемые форумчане! Пишу программу по следующему заданию:
Создать класс Изготовитель cо следующими полями: - торговая марка; - страна происхождения. Создать базовый класс Часы (модель, изготовитель) и дочерние классы: - механические часы (продолжительность работы, гарантийный срок); - электронные часы (тип батареи, тип экрана); - использовать класс Изготовитель как поле класса Часы. Функции: - cчитать из текстового файла данные о разных часах; - используя механизм виртуальных функций, в новый файл записать информацию о часах, отсортированных по названию марки; - подсчитать количество часов указанного изготовителя с заданным типом батареи; - вывести информацию о механических часах с самым большим гарантийным сроком. Поля для Механические часы: string string string int int Поля для Электронные часы: string string string string string Важно, что поля для 4 и 5 записи различаются. Так как у меня не очень большой опыт работы с классами, у меня возникли следующие вопросы: 1. Как для данной задачи считывать данные? Нужен ли дополнительный класс для считывания? Если нет, то как различать данные по последним 4 и 5 полям (они различаются). В какой объект считывать данные? 2. Что имеется ввиду под фразой используя механизм виртуальных функций, в новый файл записать информацию о часах, отсортированных по названию. Это просто виртуальные методы для сортировки и записи в файл? 3. Фраза "подсчитать количество часов указанного изготовителя с заданным типом батареи" подразумевает, что будет использоваться объект типа "Электронные часы", в то время как фраза "вывести информацию о механических часах с самым большим гарантийным сроком" подразумевает, что будет использоваться объект типа "Механические часы". Как объяснить программе какие данные из общего списка считывать для одного подкласса, а какие для другого? Нужно ли вводить некоторую функцию, которая будет различать данные для каждого подкласса? Очень прошу помочь. Пока вот все, что удалось сделать:
0
|
||||||
| 21.03.2019, 12:05 | |
|
Ответы с готовыми решениями:
41
Работа с абстрактным классом Непонятки с абстрактным классом Полиморфизм с абстрактным классом |
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
||||||
| 21.03.2019, 14:24 [ТС] | ||||||
|
zayats80888, данные получилось разделить, но теперь перед выводом куча пустых строк, вместо информации из первого подкласса.
Добавлено через 4 минуты zayats80888, это не сложно сделать, но я хотел чтобы программа различала данные, так как их потом еще обрабатывать для каждого подкласса нужно. Ваш вариант прошел, но куча пустых строк теперь перед выводом. Добавлено через 3 минуты zayats80888, выдает лишние пробелы перед выводом. Не знаете как это можно исправить?
0
|
||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|
| 21.03.2019, 14:26 | |
|
Fixer_84, там выше Azazel-San предложил отличный вариант, а что касается вывода, имеет смысл определить виртуальный метод, возвращающий строку, сформированную из данных класса, и уже выводить её(вместо дружественной функции)
1
|
|
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
|
| 21.03.2019, 14:54 [ТС] | |
|
zayats80888, я определил виртуальный метод и реализовал его для электронных часов, но при добавлении разделителя (" " или "\n") эти специальные символы в количестве 8 штук (число полей для первого класса), как и в случае с дружественной функцией (значит дело не в ней), выскакивают перед выводом. Как-то можно это исправить? Проблема почти решена.
Добавлено через 8 минут zayats80888, при этом, если разделитель не указывать, данные просто сливаются (то есть, считаны правильно). Что-то не так при выводе.
0
|
|
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||||||
| 21.03.2019, 15:43 | ||||||
|
Fixer_84, лучше бы вы использовали вариант Azazel-San, мой корявый, набросал на коленке, суть в том что он просто не считывает данные, но объект формируется(как пустой)
Добавлено через 3 минуты
0
|
||||||
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
||||||
| 21.03.2019, 16:24 [ТС] | ||||||
|
zayats80888, я так пробовал. Писал, что не равно пустой строке при выводе. Для одного поля объекта (если возвращать его в виртуальном методе) это сработало, но когда я складывал через пробел более одного геттера, эта пустая строка появлялась снова. Если я вам покажу код, вы сможете помочь исправить?
Добавлено через 3 минуты zayats80888, вот:
Добавлено через 15 минут zayats80888, понимаете, проблема в том, что я не хочу создавать дополнительный контейнер для хранения этой информации. Мне нужно, чтобы она хранилась в объектах этих двух подклассов при считывании. Дружественная функция получает доступ к приватным (не public или protected) полям, а данные в таком случае легко обрабатывать для каждого подкласса через соответствующие геттеры.
0
|
||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|
| 21.03.2019, 16:33 | |
|
0
|
|
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
|
| 21.03.2019, 16:34 [ТС] | |
|
zayats80888, спасибо. Просто очень не хочется переделывать программу. Уже много сил брошено на написание кода.
0
|
|
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||||||
| 21.03.2019, 17:07 | ||||||
|
Подправил:
1
|
||||||
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
|
| 21.03.2019, 18:11 [ТС] | |
|
zayats80888, теперь выводит совсем не то что нужно
Спасибо, что попытались исправить.
0
|
|
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||
| 21.03.2019, 18:26 | ||
|
Добавлено через 1 минуту Правда при вашем подходе я не совсем понимаю зачем нужен абстрактный класс и виртуальные методы, вы же все равно обращаетесь к объекту конкретного класса Добавлено через 2 минуты Вот если бы у вас была внешняя функция void WriteSortedData(const Clock& obj) то да
0
|
||
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
||||||||||||||||
| 21.03.2019, 18:29 [ТС] | ||||||||||||||||
|
zayats80888, он для файла clock.txt:
Должен вывести:
Добавлено через 1 минуту Вот описание виртуального метода:
0
|
||||||||||||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|
| 21.03.2019, 18:31 | |
|
А вообще, если нужно сортировать, то нужен контейнер (vector<Clock*> например)
Добавлено через 1 минуту Fixer_84, пардон, я не то считывал
1
|
|
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
|
| 21.03.2019, 18:49 [ТС] | |
|
zayats80888, буду вам очень благодарен если получится исправить. Общая сортировка будет нужна, вы правы. Но для пунктов с обработкой информации (из задания) для каждого подкласса, это считывание было бы гораздо удобней. Вообщем, если не получится буду переделывать все с дополнительным контейнером, но ведь по нему тоже пробегать придется геттерами, а они должны работать для каждого подкласса правильно.
0
|
|
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||||||||||||||||
| 21.03.2019, 19:22 | ||||||||||||||||
|
исправил
Кликните здесь для просмотра всего текста
Добавлено через 27 минут Вот простенький контейнер(только в базовом классе добавьте virtual ~Clock() {}):
1
|
||||||||||||||||
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
||||||
| 21.03.2019, 20:24 [ТС] | ||||||
|
zayats80888, спасибо вам большое! Теперь буду доделывать программу. Извините, что отнял у вас время. Просто не знал как это сделать для отдельных подклассов через дружественные функции. Да и с классами мало работал.
Добавлено через 31 минуту zayats80888, проблема возникает, если данные перемешаны. У вас программа правильно выводит? Вот пример данных:
0
|
||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|
| 21.03.2019, 20:32 | |
|
Fixer_84, да нормально, считал 5 объектов
0
|
|
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|
| 21.03.2019, 20:34 | |
|
0
|
|
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
||||||
| 21.03.2019, 20:47 [ТС] | ||||||
|
zayats80888, а у меня код выше считал так:
0
|
||||||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
||
| 21.03.2019, 20:53 | ||
|
Добавлено через 1 минуту ну или используя выше предложенный вектор, посмотрите какая именно строка считывается с ошибкой
0
|
||
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
|
| 21.03.2019, 21:09 [ТС] | |
|
zayats80888, если данные идут друг за другом, то считывает нормально, а если вперемешку выводит какую-то белиберду. Вообщем буду пробовать дальше. Спасибо большое за помощь!
Добавлено через 2 минуты zayats80888, просто весь смысл виртуального метода в том, что он сам понимает для какого класса и когда себя вызывать. Поэтому я и хотел разделить данные так. Но я рад, что у вас все работает. Буду искать проблему на своей стороне.
0
|
|
| 21.03.2019, 21:09 | |
|
Создать иерархию наследования с абстрактным базовым классом
Теория по абстрактным типам данных
работа с классом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|