Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 19

Поместить в динамически расширяемый массив объекты класса, производные от базового абстрактного класса

04.12.2015, 15:20. Показов 2615. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста новичку! (мне).

Я хочу создать динамически расширяющийся массив указателей на базовый абстрактный класс, заполняемый наследниками базового абстрактного класса, но мне не понятно, как осуществить задуманное. Например,

я могу создать ограниченный статический массив и заполнить его тем, чем нужно, вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main ( void )
{
    Abstract* buff [ 100 ];
    for( int i = 0; i < 100; ++i )
    {
        int variant = i % 2;
        if ( 0 == variant )
        {
            buff [ i ] = new SonAbstract; 
        }
        else
        {
            buff [ i ] = new DoughterAbstract;
        }
    }
    
    return ( 0 );
}
Но тогда это выйдет тупо самый обычный массив указателей.

Второй вариант, казалось бы, должен работать, но.. не работает, потому что базовый класс - абстрактный, и сделать что-то вроде этого:

C++
1
Abstract* buff = new Abstract [ count ];
нельзя. Ибо класс во-первых абстрактный, а во-вторых, мне нужен в стеке объект не базового класса а производные вперемешку.

Помогите, подскажите путь, как осуществить задуманное? Как запихнуть в динамический стек требуемое? (несколько объектов производного класса)


Проблема состоит в том, что мне надо реализовать это без STL инструментов. Это главное.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2015, 15:20
Ответы с готовыми решениями:

Как обратиться из конструктора базового абстрактного класса к свойству-массиву класса наследника
Добрый день. Подскажите как обратиться из конструктора базового абстрактного класса к свойству-массиву из класса наследника. Вроде бы...

Занести из файла объекты производных классов в массив объектов базового класса
Здравствуйте. Что в этом коде изменить, чтобы объекты производных классов заносились из файла? using System; namespace...

Функция абстрактного базового класса
Есть абстрактный класс, пусть его зовут A, а у него есть 4 потомка, пусть их зовут: B, C, D и F. Функция должна возвращать экземпляры...

7
2395 / 1925 / 763
Регистрация: 27.07.2012
Сообщений: 5,569
04.12.2015, 17:14
Лучший ответ Сообщение было отмечено faraon_frango как решение

Решение

C++
1
2
3
4
5
typedef Abstract* PAbstract;
PAbstract * buff = new PAbstract[count];
buff[0] = new Son();
buff[1] = new Doughter();
// ...
1
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 19
04.12.2015, 17:21  [ТС]
Большое спасибо!
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
04.12.2015, 20:29
Цитата Сообщение от faraon_frango Посмотреть сообщение
Я хочу создать динамически расширяющийся массив
Я тут как раз удивлялся недавно в одной теме, что студенты так нажимают на массивы.
А вы можете свою версию озвучить, чем вам вектор-то не угодил?
0
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 19
04.12.2015, 20:50  [ТС]
Цитата Сообщение от Mr.X Посмотреть сообщение
Я тут как раз удивлялся недавно в одной теме, что студенты так нажимают на массивы.
А вы можете свою версию озвучить, чем вам вектор-то не угодил?
Я могу сделать при помощи вектора, но... звучит по-идиотски, требуется, чтобы я сделал как с вектором, только без вектора, если вы понимаете, о чем я. Не я решаю.... Увы... Чуть выше есть еще одна моя тема, там я осуществил пол-стека, но теперь у меня мистическая проблема с delete

Добавлено через 16 минут
Недавно я делал аналог класса string, который делает все тоже самое, что и срршный string.
Месяцем ранее - сортировка указателей массивов с указателями на массивы char.
Вчера начал делать вот это. Сегодня я продолжаю делать ЭТО.

А я бы сделал через связный список, а не через эту муть, но раз так надо.... что я могу сделать?
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
04.12.2015, 21:14
Цитата Сообщение от faraon_frango Посмотреть сообщение
но раз так надо
Ну, в той теме так и предположили, что это преподавателей так колбасит. А вы их не спрашивали чем им-то векторы не нравятся? Так-то массив - это сугубо сишная фигня, а они наверно вам говорят, что С++ преподают?
0
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 19
04.12.2015, 22:36  [ТС]
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, в той теме так и предположили, что это преподавателей так колбасит. А вы их не спрашивали чем им-то векторы не нравятся? Так-то массив - это сугубо сишная фигня, а они наверно вам говорят, что С++ преподают?
Да нашего и спрашивать не надо. Он на второй лекции еще сказал, что лучшая методика обучения - велосипеды изобретать. Вроде "даю задание, а вы творчески выполняете в рамках условия". Говорил, что очень хорош метод повторения увиденного. А на счет библиотек, он сказал, что это всегда успеется, и что если есть база, то в библиотеках разобраться не трудно будет. Старые ученики его хвалили...
Но нагружает он - спины трещат. Вот эта задачка - она больше не на массивы, а на виртуальные функции и на наследование я так понял + указатели. Потому что по идее, если выполнить все задание, то выглядит это так:
Пользователь вводит строку, строка раскладывается на составляющие, составляющие хранятся в классах-наследниках от базового абстрактного, сбрасываются в стек, потом путем перегонки из одного стека в другой с попутными манипуляциями высчитывается некий математический результат и выводится на экран.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
04.12.2015, 22:57
Цитата Сообщение от faraon_frango Посмотреть сообщение
если есть база, то в библиотеках разобраться не трудно будет
Ну, основная часть С++ содержится в библиотеках, как и Си, впрочем, т.е. библиотеки - это неотъемлемая и основная часть языка, такова его структура, так что такое разделение вашего преподавателя глупо. Он явно не С++ с вами изучает.
Цитата Сообщение от faraon_frango Посмотреть сообщение
Пользователь вводит строку, строка раскладывается на составляющие, составляющие хранятся в классах-наследниках
Он у вас непоследователен. По его теории классами тоже нельзя пользоваться, а надо что-нибудь велосипедное вместо них изобрести.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2015, 22:57
Помогаю со студенческими работами здесь

Вызов конструктора абстрактного базового класса
Здравствуйте, в классе вызываю с помощью super() конструктор абстрактного базового класса -...

Передача списка элементов базового абстрактного класса с сервера на клиент
Возникла проблема при написании приложения: На сервер посылается запрос, цель которого получить список объектов. Этот список содержит...

Объекты абстрактного класса
Разбираю пример. В программе задается сразу 6 объектов. А нужно, чтобы количество объектов вводилось пользователем с клавиатуры. ...

Можно ли динамически выделить память под массив указателей, на объекты класса?
Прошу прощения если не правильно назвал вопрос. Не знаю как правильно сформулировать. Можно ли строчку VisualizationTools* VT; заменить...

Реализовать абстрактные функции-члены абстрактного базового класса в производных классах
1. Определить иерархию классов 2. Определить и построить абстрактный класс, который содержит: абстрактные методы, абстрактные свойства,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru