0 / 0 / 0
Регистрация: 03.01.2020
Сообщений: 16
|
|
1 | |
Создание динамического массива объектов разных классов24.05.2020, 22:31. Показов 5664. Ответов 7
Метки нет (Все метки)
У меня есть класс Car и 3 класса Buss, Truck, Passenger которые наследуют класс Car.
Как создать динамический массив объектов разных классов? Если нельзя, то как создать динамический массив объектов класса?
0
|
24.05.2020, 22:31 | |
Ответы с готовыми решениями:
7
Создание коллекции объектов разных классов Создание динамического массива объектов Создание динамического массива объектов «Поезд» и работа с ним Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов |
319 / 216 / 114
Регистрация: 14.05.2020
Сообщений: 890
|
||||||
24.05.2020, 22:45 | 2 | |||||
0
|
Заблокирован
|
|
24.05.2020, 23:09 | 3 |
Чо нельзя-то? В этом и есть смысол ООП. Объекты (экземпляры) - это указатели, ёмаё. Ну создай массив (или вектор) из экземпляров класса, который базовый для всей иерархии. На выходе получишь, 1хрен, кусок памяти, выделенной под указатели, которые теперь можно инициализировать адресами создаваемых экземпляров РАЗНЫХ классов.
0
|
0 / 0 / 0
Регистрация: 03.01.2020
Сообщений: 16
|
||||||
24.05.2020, 23:34 [ТС] | 4 | |||||
Ошибки:
Кликните здесь для просмотра всего текста
c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(120): error C2371: c: переопределение; различные базовые типы
1> c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(119): см. объявление "c" 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(121): error C2371: c: переопределение; различные базовые типы 1> c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(119): см. объявление "c" 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(122): error C2040: c: "std::shared_ptr<Car []>" отличается по уровням косвенного обращения от "Car *" ========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
|
319 / 216 / 114
Регистрация: 14.05.2020
Сообщений: 890
|
|
24.05.2020, 23:55 | 5 |
Daniil1254, ну как сказать? Указатель *c переименуйте например *a,*b,*c нельзя так как у Вас,
std::shared_ptr<Car[]>c(new Car[maxSize]); это умный указатель и у него тоже измените имя на любое другое (чтобы не повторялись в одной программе!!!!) И нужно #include<memory>
0
|
0 / 0 / 0
Регистрация: 03.01.2020
Сообщений: 16
|
||||||
25.05.2020, 00:15 [ТС] | 6 | |||||
Все равно не понятно, что надо сделать. Вот у меня есть массив "с" с размером "maxSize" и я меняю у объекта тип:
c[0].SetType("Bus"); Как я понял умный указатель каким-то образом узнает какой класс присвоить c[0]
Кликните здесь для просмотра всего текста
1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(173): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(173): error C2228: выражение слева от ".SetType" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(175): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(175): error C2228: выражение слева от ".SetMark" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(178): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(178): error C2228: выражение слева от ".SetPower" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(181): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(181): error C2228: выражение слева от ".SetTypeBody" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(184): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(184): error C2228: выражение слева от ".SetTransmission" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(187): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(187): error C2228: выражение слева от ".SetAge" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(190): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(190): error C2228: выражение слева от ".SetCountSpeed" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(197): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(197): error C2228: выражение слева от ".AddDriver" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(229): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(229): error C2228: выражение слева от ".ReturnMark" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(235): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(235): error C2228: выражение слева от ".ReturnMark" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(237): error C2664: "void DataВebugger(std::string,Car *,int)": невозможно преобразовать аргумент 2 из "std::shared_ptr<Car []>" в "Car *" 1> Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(262): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(262): error C2228: выражение слева от ".SetType" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(275): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(275): error C2228: выражение слева от ".SetMark" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(280): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(280): error C2228: выражение слева от ".SetPower" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(285): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(285): error C2228: выражение слева от ".SetTypeBody" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(290): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(290): error C2228: выражение слева от ".SetTransmission" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(295): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(295): error C2228: выражение слева от ".SetAge" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(300): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(300): error C2228: выражение слева от ".SetCountSpeed" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(314): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(314): error C2228: выражение слева от ".ReturnMark" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(329): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(329): error C2228: выражение слева от ".ReturnMark" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(331): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(331): error C2228: выражение слева от ".PrintCar" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(341): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(341): error C2228: выражение слева от ".ReturnMark" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(367): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(367): error C2228: выражение слева от ".ReturnMark" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(368): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(368): error C2228: выражение слева от ".ReturnPower" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(369): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(369): error C2228: выражение слева от ".ReturnTypeBody" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(370): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(370): error C2228: выражение слева от ".ReturnTransmission" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(371): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(371): error C2228: выражение слева от ".ReturnAge" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(372): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(372): error C2228: выражение слева от ".ReturnCountSpeed" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(373): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(373): error C2228: выражение слева от ".ReturnCount" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(375): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(375): error C2228: выражение слева от ".ReturnCount" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(377): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(377): error C2228: выражение слева от ".ReturnDriver" должно представлять класс, структуру или объединение 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(378): error C2676: бинарный "[": "std::shared_ptr<Car []>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору 1>c:\users\admin\desktop\институт\программирование\лабы 2020\лаба5\main.cpp(378): error C2228: выражение слева от ".ReturnDriver" должно представлять класс, структуру или объединение ========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
|
Комп_Оратор)
|
||||||
25.05.2020, 00:24 | 7 | |||||
Daniil1254, тип контейнера - указатель на базовый класс. Рекомендую вектор. Потом i-тый элемент заселяется по принципу:
0
|
Заблокирован
|
||||||
25.05.2020, 01:44 | 8 | |||||
Сообщение было отмечено Daniil1254 как решение
Решение
0
|
25.05.2020, 01:44 | |
25.05.2020, 01:44 | |
Помогаю со студенческими работами здесь
8
Взаимодействие объектов разных классов Создание массива из разных объектов Создание массива экземпляров разных классов Массив объектов разных производных классов Вектор объектов разных классов. Полиморфим Обработка множества объектов разных классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |