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

Создать массив указателей на тип базового класса

21.10.2021, 11:47. Показов 3137. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Только начала учить ООП.
И тут такое задание:при хранении объектов иерархии, хранить их как массив указателей на тип базового класса.
В голове-то я понимаю, что имели ввиду, а вот на практике не знаю как прописать. Помогите, пожалуйста.
К примеру, базовый класс Kran, а производные smesitel и gusak
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.10.2021, 11:47
Ответы с готовыми решениями:

Создать массив указателей базового класса и присвоить ему адреса каждого из екземпляров класса
Всем привет. Есть условие задачи: Дан базовый класс Base у которого есть метод my_name, метод выводит сообщение This is Base class. От...

Как создать динамический массив объектов базового класса и заполнить его наследниками базового класса?
#include <iostream> using namespace std; class P { int p; public: P() {

как сделать чтобы объект производного класса сам себя добавлял в список или массив указателей базового класса?
я хотел так, но программа просто падает void Student::add(Base** head) { cout << "I here" << endl; this->setName(); //все...

6
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,686
21.10.2021, 12:22
Лучший ответ Сообщение было отмечено ne_master как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
 
class Kran
{
public:
    virtual void i_am(void) const { std::cout << "i am Kran!" << std::endl; }
    virtual ~Kran(void) { }
};
 
class Smesitel : public Kran
{
public:
    virtual void i_am(void) const override { std::cout << "i am Smesitel!" << std::endl; }
};
 
class Gusak : public Kran
{
public:
    virtual void i_am(void) const override { std::cout << "i am Gusak!" << std::endl; }
};
 
int main()
{
    int count;
    std::cin >> count;
    Kran **items = new Kran*[count];
 
    for (int i = 0; i < count; ++i)
    {
        std::cout << "Item number " << i + 1 << " is a (1. Kran/ 2. Smesitel/ 3. Gusak): ";
        char choise;
        std::cin >> choise;
        switch (choise)
        {
        case '1': items[i] = new Kran; break;
        case '2': items[i] = new Smesitel; break;
        case '3': items[i] = new Gusak; break;
        default:
            --i;
            std::cout << "Invalid choise!" << std::endl;
            break;
        }
    }
 
    for (int i = 0; i < count; ++i)
    {
        items[i]->i_am();
        delete items[i];
    }
 
    delete[] items;
 
    return 0;
}
2
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
21.10.2021, 12:24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Kran
{
public:
   virtual void f(){cout<<"Кран ";}
};
class smesitel: public Kran
{
public:
   virtual void f(){cout<<"Смеситель ";}
};
int main()
{
   const int N=3;
   Kran* arr[N];
   arr[0]=new Kran;
   arr[1]=new smesitel;
   arr[2]=new Kran;
  for(int i=0;i<N;i++)
     arr[i]->f(); // вывод "Кран Смеситель Кран"
  for(int i=0;i<N;i++)
     delete arr[i];
}
2
1 / 1 / 0
Регистрация: 10.04.2021
Сообщений: 75
21.10.2021, 12:27  [ТС]
Спасибо большое, попробую)
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,686
21.10.2021, 12:58
zss, так не получится, нужен массив указателей
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
21.10.2021, 13:36
Цитата Сообщение от Annemesski Посмотреть сообщение
нужен массив указателей
Цитата Сообщение от zss Посмотреть сообщение
Kran* arr[N];
Это и есть массив указателей на тип Kran
Вы сделали такой же.
Только Ваш массив создается динамически нужного размера,
а мой статически константного размера.
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,686
21.10.2021, 13:50
zss, да... сори, что-то проглядел в Вашем объявлении массива.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.10.2021, 13:50
Помогаю со студенческими работами здесь

Можно ли создать массив из объектов базового и производного класса?
Доброй ночи. Есть задание: Возник вопрос о реализации метода &quot;TovarRead&quot;. Насколько я понял задание, массив должен состоять из...

Создать двумерный массив указателей на тип данных char
Подскажите, как сделать массив указателей.

Как создать массив указателей на объекты класса
Задача состоит в создании многофайлового проекта. Каждый класс находится в отдельном файле. В файле main.cpp нужно создать массив...

Создать массив указателей на объекты класса, описывающего насекомых
Создать массив указателей на объекты класса, описывающего насекомых (количество ног, наличие крыльев, цвет, название.). Создать новый...

Тип элемента массива базового класса
Суть задачи такова: есть массив указателей базового класса. Одному из них я присваиваю указатель на производный класс. По логике, этот...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru