|
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 227
|
||||||
Добавление объектов классов в односвязный список путем вызова методов этих классов09.11.2020, 20:59. Показов 9002. Ответов 13
Метки абстрактный класс, класс, наследование, односвязный список, С++ для начинающих, функция, экземпляр класса (Все метки)
Все ломаю голову как решить эту задачу. Есть несколько классов. Один абстрактный, остальные производные. Нужно написать односвязный список. В списке должны быть функции добавления элемента и просмотр списка. Для каждого производного класса нужно определить свои функции добавления и просмотра. У меня класс list написан при помощи шаблона, чтобы объекты разных классов принимал. При этом я туда закидываю ссылку на объект this. Я не могу просто взять и создать один объект класса list, а туда уже добавлять элементы, т.к. опять же используется шаблон и при создании необходимо указать аргумент типа, который у разных классов разнится. Создавая несколько объектов у меня просто создается несколько (штук 8, не знаю откуда) списков и при выводе в каждом списке один единственный элемент (вроде так это работает). Собственно говоря, я хочу один список, в который можно добавить объект любого класса при вызове функции соответствующего класса, и вывести который можно через функцию объекта любого класса (по сути они могут быть одинаковы). Вот ничего не получается, буду рад помощи.
0
|
||||||
| 09.11.2020, 20:59 | |
|
Ответы с готовыми решениями:
13
Распечатать односвязный список классов Односвязный список (реализация без классов) Массив разных классов. Как добратся до всех полей этих классов? |
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||
| 09.11.2020, 21:42 | ||||||
|
KaffLime, может так?
0
|
||||||
|
388 / 333 / 65
Регистрация: 14.10.2014
Сообщений: 1,437
|
|
| 09.11.2020, 21:46 | |
|
zayats80888, А может он хотел замутить свой список? Только нафига его внутрь классов втыкать?
KaffLime, Что мешает сделать свой шаблонный класс список отдельно от других классов? Ну то есть не определять их внутри каждого класса, а написать отдельно шаблонный класс и потом использовать в других своих классах экземпляры этого шаблонного класса?
0
|
|
|
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 227
|
|
| 09.11.2020, 22:09 [ТС] | |
|
Recrut_rf, без разницы, вывод один и тот же. Уже пробовал )
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 09.11.2020, 22:12 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 227
|
||||||
| 09.11.2020, 22:29 [ТС] | ||||||
|
zayats80888, хм, может и подойдет. А что это за чудеса?
Хотя наверное нет... Объекты классов не создаются в качестве отдельных элементов и функция вывода списка определена не так, как мне нужно. Прикол в том, чтобы вызывать в любом классе функцию вывода списка Ну и добавления
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 09.11.2020, 22:52 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 227
|
|
| 09.11.2020, 23:06 [ТС] | |
|
zayats80888
Написать программу, в которой создается иерархия классов. Включить полиморфные объекты в связанный список, используя статические компоненты класса. Показать использование виртуальных функций. Порядок выполнения работы. 1. Определить иерархию классов (в соответствии с вариантом). 2. Определить в классе статическую компоненту - указатель на начало связанного списка объектов и статическую функцию для просмотра списка. 3. Реализовать классы. 4. Написать демонстрационную программу, в которой создаются объекты различных классов и помещаются в список, после чего список просматривается. 5. Сделать соответствующие методы не виртуальными и посмотреть, что будет. 6. Реализовать вариант, когда объект добавляется в список при создании, т.е. в конструкторе (смотри пункт 6 следующего раздела). Методические указания. 1. Для определения иерархии классов связать отношением наследования классы, приведенные в приложении (для заданного варианта). Из перечисленных классов выбрать один, который будет стоять во главе иерархии. Это абстрактный класс. 2. Определить в классах все необходимые конструкторы и деструктор. 3. Компонентные данные класса специфицировать как protected. 4. Пример определения статических компонентов: static person* begin; // указатель на начало списка static void print(void); // просмотр списка 5. Статическую компоненту-данное инициализировать вне определения класса, в глобальной области. 6. Для добавления объекта в список предусмотреть метод класса, т.е. объект сам добавляет себя в список. Например, a.Add() − объект a добавляет себя в список. Включение объекта в список можно выполнять при создании объекта, т.е. поместить операторы включения в конструктор. В случае иерархии классов, включение объекта в список должен выполнять только конструктор базового класса. Вы должны продемонстрировать оба этих способа. 7. Список просматривать путем вызова виртуального метода Show каждого объекта. 8. Статический метод просмотра списка вызывать не через объект, а через класс. 9. Определение классов, их реализацию, демонстрационную программу поместить в отдельные файлы. Содержание отчета. 1. Титульный лист: название дисциплины; номер и наименование работы; фамилия, имя, отчество студента; дата выполнения. 2. Постановка задачи. Следует дать конкретную постановку, т.е. указать, какие классы должны быть реализованы, какие должны быть в них конструкторы, компоненты-функции и т.д. 3. Иерархия классов в виде графа. 4. Определение пользовательских классов с комментариями. 5. Реализация конструкторов с параметрами и деструктора. 6. Реализация методов для добавления объектов в список. 7. Реализация методов для просмотра списка. 8. Листинг демонстрационной программы. 9. Объяснение необходимости виртуальных функций. Следует показать, какие результаты будут в случае виртуальных и не виртуальных функций. 9) игрушка, продукт, товар, молочный продукт;
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||
| 09.11.2020, 23:22 | ||||||
Сообщение было отмечено KaffLime как решение
Решение
KaffLime, то ещё извращение. Как то так, свой указатель на список сам реализуй.
Кликните здесь для просмотра всего текста
1
|
||||||
|
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 227
|
|
| 10.11.2020, 00:12 [ТС] | |
|
zayats80888, ну, здесь далеко не только указатель написать, но спасибо за помощь.
Добавлено через 14 минут zayats80888, только ответьте ещё на один вопрос, пожалуйста. Тут в список goods заносятся объекты/указатели на объекты, кроме класса Good? Хочу в конструкторах производных классов добавление сделать. Если я просто функцию add для них перепишу, получится бред?
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 10.11.2020, 00:24 | |||
|
0
|
|||
|
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 227
|
|
| 10.11.2020, 00:49 [ТС] | |
|
zayats80888, тут написано, что необходимо два варианта продемонстрировать...
... 6. Для добавления объекта в список предусмотреть метод класса, т.е. объект сам добавляет себя в список. Например, a.Add() − объект a добавляет себя в список. Включение объекта в список можно выполнять при создании объекта, т.е. поместить операторы включения в конструктор. В случае иерархии классов, включение объекта в список должен выполнять только конструктор базового класса. Вы должны продемонстрировать оба этих способа.
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||
| 10.11.2020, 00:54 | ||||||
|
KaffLime, ну допустим , вариант без автодобавления:
0
|
||||||
|
0 / 0 / 0
Регистрация: 05.05.2020
Сообщений: 227
|
|
| 10.11.2020, 01:07 [ТС] | |
|
zayats80888, не, этого я уже не пойму. Может сам чего придумаю потом, спасибо еще раз
0
|
|
| 10.11.2020, 01:07 | |
|
Помогаю со студенческими работами здесь
14
Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов) Реализовать иерархию классов, включающую в себя односвязный и двусвязный список Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов Преобразования объектов классов в объекты других классов Подскажите где можно взять список пакетов методов и классов lwjg Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|