5 / 5 / 4
Регистрация: 23.09.2014
Сообщений: 180
1

Как инициализировать абстрактный класс в контейнере vector

30.05.2018, 11:41. Показов 818. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть абстрактный класс MyDebugger, от него унаследовал два класс MyDebugger1 и MyDebugger2. Мне необходимо хранить объекты унаследованных классов в одном контейнере vector. При попытки создать
C++
1
 std::vector <MyDebugger> vec;
пишет что абстрактный класс нельзя инициализировать. Можно ли как то решить эту проблему, чтобы хранились объекты в одном векторе?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2018, 11:41
Ответы с готовыми решениями:

Абстрактный класс, удаление наследника из std::vector<T>
При удалении через итератор выбивает ошибку в ходе выполнения программы. Имеется абстрактный...

Как инициализировать Vector <class>?
Нужно реализовать такую задачу: Дан список учеников в формате Имя Оценка1 Оценка2 Оценка3 Надо...

Как инициализировать vector<comlex<double>> заданными значениями?
Добрый день. У меня есть табличка с косинусами и синусами первообразных корней из единички: ...

Поиск в контейнере vector
например есть класс class A{ int i; publuc: A(int i):i(i); }; и создан контейнер...

4
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
30.05.2018, 11:51 2
Тебя не смущает, что нужны ссылки? std::vector<MyDebugger*> vec или std::vector<std::shared_ptr<MyDebugger>> vec
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
30.05.2018, 11:55 3
Нельзя создать объект с типом базовый класс. И это касается не только объектов в векторе.
Используйте указатели (желательно смарт поинтеры) объектов базового класса на объекты производного.
1
5 / 5 / 4
Регистрация: 23.09.2014
Сообщений: 180
30.05.2018, 16:03  [ТС] 4
Цитата Сообщение от MrGluck Посмотреть сообщение
Нельзя создать объект с типом базовый класс. И это касается не только объектов в векторе.
Используйте указатели (желательно смарт поинтеры) объектов базового класса на объекты производного.
С этим я разобрался а вот как теперь получить доступ к функциям класса по ссылке объекта?
C++
1
2
3
4
5
6
7
8
9
10
11
//! метод count считает полные потери в битве
void count(std::list <DarkWhitePower*> vec)
{
    int i = 0;
    for (list <DarkWhitePower*> ::iterator it = vec.begin(); it != vec.end(); it) {
        if (it->whiteTroops == 0) { // так не получается получить доступ
            break;
        }
 
    }
}
Добавлено через 43 минуты
Сам разобрался
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//! метод count считает полные потери в битве
int count(std::list <DarkWhitePower*> &vec)
{
    int count = 0;
    DarkWhitePower* m;
    for (list <DarkWhitePower*> ::iterator it = vec.begin(); it != vec.end(); it++) {
        m = *it;
        if (m->lostDarkTroops == 0 && m->lostDarkTroops == 0) {
            count++;
        }
    }
    return count;
}
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
30.05.2018, 18:08 5
Можно дважды разыменовать, в первом случае итератор, во втором указатель.
Но конкретно в вашем случае больше подойдёт for цикл по коллекции
C++
1
for (const auto &m : vec) { ...
0
30.05.2018, 18:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2018, 18:08
Помогаю со студенческими работами здесь

Найти повторяющиеся числа в контейнере vector
Есть контейнер vector&lt;int&gt; v, в котором записаны числа. Как можно найти моду (одинаковые элементы)...

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... ...

Цикл: Создайте класс Matrix на базе вектора vector<vector<int>>.
Создайте класс Matrix на базе вектора vector&lt;vector&lt;int&gt;&gt;. Определите операторную функцию ostream\&amp;...

Как использовать абстрактный класс?
есть сторонняя библиотека где присутствует абстрактный класс: public abstract class...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru