С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 16.10.2021
Сообщений: 10

Наследование, массив объектов дочернего класса внутри родительского

10.12.2021, 21:18. Показов 1761. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, нигде не смогла найти ответа на этот вопрос.
Я создала несколько классов, класс родитель, дочерний класс, и у дочернего класса еще несколько классов.
Есть ли возможность в родительском классе создать массив, состоящий из объектов дочернего класса (хочу создать массив объектов разных типов, не помещая его в main)? Просто хочу понять, возможно ли реализовать мою задумку с наименьшим количеством кода в main.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.12.2021, 21:18
Ответы с готовыми решениями:

Передача объектов дочерних классов через массив объектов родительского класса в функцию
Здравствуйте. Возможно, вопрос больше относится к теории ООП, но все же я не решился задавать его в теме теории ООП, так как он кажется мне...

Может ли метод родительского класса обратиться к полю дочернего класса
Может ли метод родительского класса обратиться к полю дочернего класса?

Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса?
Ну то есть так: есть родительский и дочерний класс, в родительском определен виртуальная функция и вызывается в его конструкторе (камень...

2
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
10.12.2021, 22:00
Лучший ответ Сообщение было отмечено Абобабиба как решение

Решение

Цитата Сообщение от Абобабиба Посмотреть сообщение
Есть ли возможность в родительском классе создать массив, состоящий из объектов дочернего класса
Нет. Только массив указателей на базовый класс. И использовать динамический полиморфизм.

Или массив объектов типа std::variant. И использовать статический полиморфизм.

Добавлено через 7 минут
Пример первого варианта. Правда он оправдан для построения древовидной иерархии, а что вам там действительно нужно, не понятно.
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
#include <iostream>
#include <memory>
#include <vector>
#include <string>
 
class Base {
public:
  virtual ~Base() = default;
  
  virtual void sayMyName() const { std::cout << "Base\n"; }
  
  template<class T, class ...Args>
  Base& addChildren(Args&&... args) {
    m_children.emplace_back(std::make_unique<T>(std::forward<Args>(args)...));
    return *this;
  }
 
  //...
  
  void callSayMyName() const {
    sayMyName();
    for (auto const& child : m_children)
      child->callSayMyName();
  }
private:
  //...
  std::vector<std::unique_ptr<Base>> m_children;
};
 
class DerivedOne : public Base
{
  int m_id;
public:
  DerivedOne(int id) : m_id(id) {};
  void sayMyName() const override { std::cout << "DerivedOne " << m_id << '\n'; }
};
 
class DerivedTwo : public Base
{
  std::string m_id;
public:
  DerivedTwo(std::string id) : m_id(std::move(id)) {};
  void sayMyName() const override { std::cout << "DerivedTwo " << m_id << '\n'; }
};
 
int main()
{
  Base().addChildren<DerivedOne>(666)
    .addChildren<DerivedTwo>("Azaza")
    .addChildren<DerivedOne>(777)
    .addChildren<DerivedTwo>("qwerty")
    .callSayMyName();
}
1
2 / 2 / 0
Регистрация: 16.10.2021
Сообщений: 10
10.12.2021, 23:17  [ТС]
Спасибо, просто я должна была убедиться, что не просто так захламляю main
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2021, 23:17
Помогаю со студенческими работами здесь

Ссылка на метод дочернего класса из родительского
Всем привет! Я новичок в C++. Помогите, пожалуйста, сослаться из родительского класса на метод, реализованный в дочернем классе, и,...

использование конструктора родительского класса для дочернего
Добрый день. Подскажите про конструкторы. Есть абстрактный родительский класс (в нем есть чисто виртуальный метод) Могу ли я в нем...

Обратиться к конструктору дочернего класса в интерфейсе родительского
Есть заголовочный файл FirstDlg.h с интерфейсом класса FirstDlg унаследованного от CDialog; Хочу в интерфейсе класса(заголовочном файле)...

Размещение дочернего блока внутри родительского
Как заключить данный блок (смотрите код ниже) во внешний блок, чтобы получилось примерно вот так: .box h2 { ...

Рамка дочернего элемента располагается внутри родительского
Доброго времени суток. Необходимо расположить дочерние элементы на всю высоту родителя. Но сделать это не получается. Рамки дочерних...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru