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

Интересное задание (Сколько ячеек памяти выделится под переменные?)

14.12.2012, 01:11. Показов 2109. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан такой код:
C++
1
2
3
4
5
6
7
8
9
class A
{
private:a;
protected:b;
public:c;
};
class B: public A
{
};
Сколько ячеек памяти выделится под переменные? Ответ: для 3. Но использовать мы сможем только protected, public. Зачем выделяется память под private-переменные?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2012, 01:11
Ответы с готовыми решениями:

Сколько выделится памяти под битовое поле?
Доброго времени суток! Разбираю одну програмку, а именно реализацию телефонной базы данных. Может кто-нибудь объяснить что такое битовое...

Выделение памяти под глобальные переменные
Кто - нибудь объясните мне не ведающему почему так: Имеется структура с таким вот содержанием: typedef struct { u8 type; u32...

Выделением памяти под переменные собственного класса
Создаю указатель собственного типа, выделяю память - ошибка "Write to Adress 0x00000" По коду: MyClass* pMyClass; pMyClass=new...

10
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
14.12.2012, 01:31
а зачем писать переменную, которую не надо использовать? и где гарантия, что она не используется в классе А?
0
2 / 2 / 4
Регистрация: 13.10.2012
Сообщений: 60
14.12.2012, 02:22  [ТС]
Именно для этого случая.

Зачем компилятор выделяет память при наследовании под private-переменные, хотя он их и не будет использовать.
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
14.12.2012, 02:35
вопрос остался без ответа:
Цитата Сообщение от I.M. Посмотреть сообщение
а зачем писать переменную, которую не надо использовать?
Цитата Сообщение от 9cbka Посмотреть сообщение
Зачем компилятор выделяет память при наследовании под private-переменные, хотя он их и не будет использовать.
компилятор вообще ничего не использует. Использует программист. Ему вопросы - он ответит. Зачем он создает ненужную переменную.
1
2 / 2 / 4
Регистрация: 13.10.2012
Сообщений: 60
14.12.2012, 02:52  [ТС]
Цитата Сообщение от I.M. Посмотреть сообщение
вопрос остался без ответа:



компилятор вообще ничего не использует. Использует программист. Ему вопросы - он ответит. Зачем он создает ненужную переменную.
В базовом классе исп. через методы private-переменные. В производном классе они уже не нужны, но при наследовании под них выделяется память. Зачем?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.12.2012, 02:57
9cbka, если объект является другим объектом, это вовсе не значит, что у него должна быть "отрезана нога". Вы не понимаете суть ООП.
1
2 / 2 / 4
Регистрация: 13.10.2012
Сообщений: 60
14.12.2012, 03:01  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
9cbka, если объект является другим объектом, это вовсе не значит, что у него должна быть "отрезана нога". Вы не понимаете суть ООП.
У меня конкретный вопрос, написанный мною в первой посте. Пока нужного ответа я не увидел.

Стоп. Про "отрезанную ногу" по-подробнее.

З.Ы. кажется дошел смысл))
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.12.2012, 03:03
9cbka, есть объект - он имеет свойства. При наследовании мы показываем, что один объект является другим объектом. Так почему большее не должно содержать части из меньшего?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
14.12.2012, 05:21
Как же тут не выделить память.

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
#include <iostream>
 
class A 
{
public:
    A() : data_(0) { }
    void SetData(int data) { data_ = data; }
    int GetData() const { return data_; }
 
private:
    int data_;
};
 
class B : public A
{
};
 
int main()
{
    B obj;
    obj.SetData(42);
    std::cout << obj.GetData() << std::endl;
 
    return 0;
}
0
2 / 2 / 4
Регистрация: 13.10.2012
Сообщений: 60
14.12.2012, 22:44  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Как же тут не выделить память.

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
#include <iostream>
 
class A 
{
public:
    A() : data_(0) { }
    void SetData(int data) { data_ = data; }
    int GetData() const { return data_; }
 
private:
    int data_;
};
 
class B : public A
{
};
 
int main()
{
    B obj;
    obj.SetData(42);
    std::cout << obj.GetData() << std::endl;
 
    return 0;
}
Вы не поняли мой вопрос. Но я уже нашел ответ.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
14.12.2012, 22:52
Цитата Сообщение от 9cbka Посмотреть сообщение
Сколько ячеек памяти выделится под переменные? Ответ: для 3.
ответ не верный
ты не указал размерность переменной
для трех int 12 байт (с учетом выравнивания может и 16)
Цитата Сообщение от 9cbka Посмотреть сообщение
Зачем выделяется память под private-переменные?
как это зачем?
а если ты будешь использовать в этом же классе
хотя может и вообще ничего не выделится
вот в таком коде
C++
1
2
3
4
5
int main()
{
B b;
return 0;
}
оптимизатор
видя что b не используется со спокойной душой выкинет это все
и получишь
что то типа
Assembler
1
2
xor eax,eax
ret
что аналогично
C++
1
2
3
4
int main()
{
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.12.2012, 22:52
Помогаю со студенческими работами здесь

Функция не видит выделенной памяти под глобальные переменные
При решении задачи с алгоритмом поиска в глубину возникла проблема: описание переменных происходит над п/п алгоритма, выделение памяти под...

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

Сколько энергии выделится при сжигании газа?
При сгорании природного газа объемом 1 м3, находящегося при нормальных условиях, выделяется энергия, равная 36 МДж. Сколько энергии...

Открыть файл с расширением .pas ми подсчитать сколько в памяти занимают переменные типа Integer
помоги в самом считывании

интересное задание
помогите решить следующую задачу для каждого слова заданного предложения указать долю согласных. Определить слово, в котором доля...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 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 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru