Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
1

Работа с памятью: можно ли в массив объектов с полем типа "Родитель", вписать объекты с полем типа "Потомок"

26.03.2016, 21:17. Просмотров 398. Ответов 5
Метки нет (Все метки)

Здравствуйте. Предположим, что у нас есть массив из структур в которых находиться класс Item и число Count. Можно ли на место Item записать экземпляр класса унаследованного от Item?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2016, 21:17
Ответы с готовыми решениями:

Решение заданий типа "Array","Matrix","String","File","Text"""
большая просьба помочь решить где-то около 35-40 (из 100) задач (мне не понятных) типа массив и...

Обработка "null" в MS Access "Приведение типа "|DBNull" к типу "String" является недопустимым"
Здравствуйте. Работаю с базой MS Access Вывожу в DataGridView таблицу Проблема следующая, если у...

Проблема при сравнении: "Оператор ">" не может применяться к операндам типа "Т" и "Т""
Добрый день , пишу сортировку , все делаю на основе Т , но вот в чем проблемма public class...

Столкнулся с ошибкой "аргумент типа "const char *" несовместим с параметром типа "LPCWSTR"
Привет, столкнулся с ошибкой "аргумент типа "const char *" несовместим с параметром типа "LPCWSTR""...

5
Эксперт С++
8226 / 3814 / 826
Регистрация: 15.11.2014
Сообщений: 8,664
26.03.2016, 21:33 2
Цитата Сообщение от maks242 Посмотреть сообщение
Можно ли на место Item записать экземпляр класса унаследованного от Item?
можно.

однако, наследник может иметь дополнительные поля,
а значит занимать больше места.

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

но если размер наследника совпадает с размером базового класса,
тогда - почему бы и нет?
обычное дело на практике.
1
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
26.03.2016, 21:36  [ТС] 3
Дело в том, что у меня унаследованный класс имеет больше переменных чем базовый класс. Как в таком случае поступить?
0
Модератор
Эксперт С++
9924 / 8444 / 5132
Регистрация: 18.12.2011
Сообщений: 22,613
26.03.2016, 21:38 4
Цитата Сообщение от maks242 Посмотреть сообщение
Как в таком случае поступить?
Принято хранить указатель на базовый класс и динамически выделять нужную память.
Тогда таких проблем не возникнет!
0
Эксперт С++
8226 / 3814 / 826
Регистрация: 15.11.2014
Сообщений: 8,664
26.03.2016, 21:44 5
Цитата Сообщение от maks242 Посмотреть сообщение
Дело в том, что у меня унаследованный класс имеет больше переменных чем базовый класс. Как в таком случае поступить?
как то так:

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
#include <iostream>
 
struct base{
    virtual ~base(){}
    virtual const char* name()const { return "base"; }
};
 
struct foo: base{
    virtual const char* name()const { return "foo"; }
    int a=10;
};
 
struct der: base{
    virtual const char* name()const { return "der"; }
    double a=10;
};
 
int main()
{
    std::cout << "Hello, world!\n";
 
    base* arr[] = {
        new foo,
        new der
    };    
    
    for(const auto& el: arr)
        std::cout <<"my name is '"<< el->name()<<"'\n",
        delete el;
}
0
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
26.03.2016, 21:44  [ТС] 6
Каким образом можно выделить память в массиве для такого элемента?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2016, 21:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Составить программу по управлению манипулятором "мышь". Выбор типа курсора организовать по нажатию на клавиши "q","w","r
Составить программу по управлению манипулятором &quot;мышь&quot;. Выбор типа курсора организовать по нажатию...

"Неожиданный" пропуск ввода при заполнении пользователем полей в массиве объектов типа "Student"
Здравствуйте. Решил создать небольшой класс &quot;Студент&quot; с массивом объектов. При первом прохождении...

Как связать "поле со списком" с полем "форматированный текста" Word
Подскажите как связать &quot;поле со списком&quot; с полем &quot;форматированный текста&quot;. к примеру из &quot;поле...

Поиск в массиве. Ошибка "Оператор "&&" не может применяться к операндам типа "bool" и "double""
Найти номер последнего минимального элемента среди положительных четных элементов, лежащих правее...

Как можно описать классы "ячейка" и "предмет" для игры типа RPG
Помогите представить то, как можно написать инвентарь и предмет. Допустим я делаю что то вроде...

Вывести нечётные числа. Ошибка: оператор "%" невозможно применить к операнду типа "string" и "int"
Я новичок в программировании, поэтому не судите строго если тут всё говно. Нужно сделать, чтобы код...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.