|
0 / 0 / 0
Регистрация: 07.10.2019
Сообщений: 78
|
|
Как создать полиморфный массив?15.03.2020, 23:44. Показов 7484. Ответов 36
Есть классы A, B, C. А - класс-родитель. B и C дочерние, наследуют от него полный функционал. Как создать массив, который будет в себе иметь обьекты всех типов и как инициализировать элементы такого массива по индексу?(Желательно с примером, но без template и vector, обычные структуры или классы).
0
|
|
| 15.03.2020, 23:44 | |
|
Ответы с готовыми решениями:
36
На базе набора функций создать полиморфный класс Как создать динамический массив типа string? Как создать класс такого массива? |
|
0 / 0 / 0
Регистрация: 07.10.2019
Сообщений: 78
|
|||
| 16.03.2020, 10:28 [ТС] | |||
|
У меня два вопроса.
0
|
|||
|
Комп_Оратор)
|
||
| 16.03.2020, 10:49 | ||
|
По духу задания, ТС нужен блок в динамической памяти, так как речь о функционале поддерживающем полиморфную коллекцию. И если коллекция подразумевает свободный набор подтипов, то освободить её от ограничений размера вполне логично. Однако ТС отказывается от шаблонных контейнеров и вы правы в том, что суть вопроса легко показать на простом. И это массив. А суть в полиморфной природе объекта и если идти от "рекомендаций", то контейнер unique_ptr был бы хорош. Но новичку это не надо (по его заявлению). А дух вопроса не понят вами полудух, даже на половину. А упрямства хватает на четверых.
0
|
||
| 16.03.2020, 12:28 | |
|
Не по теме: полудух, есть термины быта и есть термины языка. В терминах языка массивы — это T[] и array<T>.
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 16.03.2020, 12:48 | |
|
Не по теме: Вообще не понятно к чему этот спор о терминах, если ТС сам попросил решение без вектора в частности и шаблонов вообще? :) Eg0ra1, лучше покажите на примере ваши затруднения, т.к. терминологию употребляете невпопад, поэтому трудно понять точно что у вас не так.
0
|
|
| 16.03.2020, 12:51 | ||||||
|
Не по теме: полудух,
0
|
||||||
|
0 / 0 / 0
Регистрация: 07.10.2019
Сообщений: 78
|
||||||
| 16.03.2020, 13:07 [ТС] | ||||||
0
|
||||||
|
Комп_Оратор)
|
|||
| 16.03.2020, 13:15 | |||
|
Eg0ra1, Что делать дальше показал L0M, вот тут: Как создать полиморфный массив?
0
|
|||
|
0 / 0 / 0
Регистрация: 07.10.2019
Сообщений: 78
|
|
| 16.03.2020, 13:25 [ТС] | |
|
Неа
0
|
|
|
Комп_Оратор)
|
||
| 16.03.2020, 16:23 | ||
|
Eg0ra1, беда в том, что вам не массив полиморфных указателей нужен. Вам нужен массив тех, кто напишет вам программу.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 16.03.2020, 16:36 | ||
|
0
|
||
|
Мозгоправ
|
|||
| 16.03.2020, 16:39 | |||
|
Смотрите #3, строка 32: A *arr[ARRLEN]; - здесь определяется массив указателей на базовый класс. Цикл (строки 34-40) - это инициализация этого массива: при каждом проходе цикла создаётся экземпляр одного из классов, который инициализируется переменной цикла. Здесь new A((int)i) в куче выделяется память для одного объекта, для которого вызывается конструктор с параметром типа int. Адрес этого объекта заносится в arr[i].Кликните здесь для просмотра всего текста
Ошибки не будет ни при компиляции, ни в рантайме. Если метод не переопределён в дочернем классе, то будет вызван метод класса-родителя.
0
|
|||
|
0 / 0 / 0
Регистрация: 07.10.2019
Сообщений: 78
|
|
| 16.03.2020, 17:12 [ТС] | |
|
Я не вы, чтобы просить написать мне программу)
0
|
|
|
Мозгоправ
|
||
| 16.03.2020, 17:45 | ||
|
На счёт того, что "блок памяти в С++ массивом не является" - вопрос философский. В С++ "блок памяти" - это блок памяти, выделенный malloc() или др. подобной функцией (при выделении памяти по new типизация выполняется сразу). Т.е. после выделения памяти имеем указатель на void с адресом этого блока. Получается, что блок памяти становится массивом в тот момент, когда (1) мы кастим void* к указателю на тип, отличный от void и (2) мы подразумеваем, что данный указатель указывает не на единичный объект, а на несколько объектов, расположенных непрерывно в этом блоке памяти.std::array<T> появился, если не ошибаюсь, только в С++11. До этого обходились и без него. Это скорее синтаксический сахар.
0
|
||
|
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
|
||
| 16.03.2020, 17:49 | ||
|
Запутывание терминами, манипуляция понятиями. А теперь ещё больше букв про то, что это не демагогия ![]() Когда vector - всего-лишь набёр обёрток для работы с массивом. В основе у него массив. Работают там все функции с массивом. А всё что он делает: - автоматизирует new/delete - автоматизирует resize - ловит и грамотно обрабатывает ошибки (так чтобы программа не падала) - имеет функции поиска и прочие вспомогательные методы, упрощающие жизнь программисту И всё это он делает с массивом! Теперь, что такое массив, собственно... Я так понимаю, термин map-to-hardware вам не знаком. Массив - это хранение данных напрямую в ячейках памяти. В коде у вас {1,2,3}, а в реальности там ровно также заняты ячейки памяти под №№: 777,778,779 (утрировано). Т.е. массив - это 1-к-1 отражение, как в памяти хранятся данные. И он не может быть каким-то иным в векторе или где-либо ещё. В C/C++ данные в памяти хранятся именно так и никак иначе - они просто занимают ячейки подряд и вы также напрямую с этими ячейками и работаете. Всегда. А уж как вы с ними работаете - через vector, через array или прямо через [] - дело стодвадцатьпятое. Там всего-лишь доп.обёртки для работы со сгруппированными ячейками. С демагогами одна проблема, они никогда не возьмут в толк, что сколько бы бумаги не исписали, а гранит истины поломать невозможно. Истина всегда останется неизменной и, рано или поздно, все иллюзии убьются об этот гранит.
0
|
||
|
Комп_Оратор)
|
||||
| 16.03.2020, 18:39 | ||||
|
Я вот не врубился ТС писатель или читатель? Там он открывает файл, а потом пытается из него читать? Потом закрывает и просит создать массив данных? Там всё нужно делать почти с нуля. Просто и не интересно.
0
|
||||
|
Мозгоправ
|
||
| 16.03.2020, 21:44 | ||
1
|
||
| 16.03.2020, 21:44 | |
|
Если можно создать массив TButton, то как создать массив их событий? Полиморфный метод Полиморфный протектор Полиморфный конструктор [C++] Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
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, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|