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

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

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

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

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

Error: значение типа "const char" нельзя присвоить сущности типа "double"
#include <iostream> #include <iomanip>// using namespace std; void main(void) { const int...

Значение типа "void" нельзя использовать для инициализации сущности типа "int"
Не понимаю, почему компилятор считает, что s.pop() это значение типа "void".. он же вернет этот...

Значение типа "void *" нельзя использовать для инициализации сущности типа "int *"
#include <pthread.h> #include <semaphore.h> #include <stdio.h> #include <Windows.h> ...

Ошибка: аргумент типа "const char *" несовместим с параметром типа "LPCWSTR"
Здравствуйте я хочу запустить музыку в консоли с++, но мне выдает ошибку: аргумент типа "const char...

5
hoggy
Эксперт С++
7643 / 3447 / 716
Регистрация: 15.11.2014
Сообщений: 7,871
Завершенные тесты: 1
26.03.2016, 21:33 2
Цитата Сообщение от maks242 Посмотреть сообщение
Можно ли на место Item записать экземпляр класса унаследованного от Item?
можно.

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

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

но если размер наследника совпадает с размером базового класса,
тогда - почему бы и нет?
обычное дело на практике.
1
maks242
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
Завершенные тесты: 6
26.03.2016, 21:36  [ТС] 3
Дело в том, что у меня унаследованный класс имеет больше переменных чем базовый класс. Как в таком случае поступить?
0
zss
Модератор
Эксперт С++
9040 / 7844 / 4836
Регистрация: 18.12.2011
Сообщений: 20,896
Завершенные тесты: 1
26.03.2016, 21:38 4
Цитата Сообщение от maks242 Посмотреть сообщение
Как в таком случае поступить?
Принято хранить указатель на базовый класс и динамически выделять нужную память.
Тогда таких проблем не возникнет!
0
hoggy
Эксперт С++
7643 / 3447 / 716
Регистрация: 15.11.2014
Сообщений: 7,871
Завершенные тесты: 1
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
maks242
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
Завершенные тесты: 6
26.03.2016, 21:44  [ТС] 6
Каким образом можно выделить память в массиве для такого элемента?
0
26.03.2016, 21:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2016, 21:44

Значение типа "const wchar_t *" нельзя присвоить сущности типа "LPWSTR"
Здравствуйте! Что нужно поменять в настройках проекта, чтобы исправить эту ошибку? ...

Значение типа "int" нельзя использовать для сущности типа "conduction"
Добрый вечер. кто может проверить в своем компиляторе, работает данная программа, или нет? У меня...

Разработка класса String, на основании которого можно создавать объекты типа "строка символов"
Дали задание сделать класс строка. Класс должен давать возможность создавать программы, в которых...


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

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

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