С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
#1

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

14.12.2012, 01:11. Просмотров 884. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2012, 01:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интересное задание (Сколько ячеек памяти выделится под переменные?) (C++):

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

Сколько памяти выделяется под структурную переменную - C++
Подскажите, пожалуйста. Сколько памяти выделяется под структурную переменную типа cell? struct cell { unsigned char bit:1; //i-ый...

Придумайте, пожалуйста, задание с классами - только интересное - C++
Вот стало скучно хочу что-то написать придумайте задание только что-то интиресное знаю классы!

Интересное задание (Определить стоимость проезда на трамвае) - C++
Определить стоимость проезда на трамвае. Университетское задание для первокурсников, можно сказать первое задание по программированию....

Размер ячеек памяти - C++
Каков размер ячеек памяти? Вычитал, что одна ячейка равна одному байту. Но тут возник вопрос: Предположим, в памяти хранится int...

Переменные в динамической памяти! - C++
подскажите как реализовать такое задание: Разместите в динамической памяти две переменные типа структура, содержащую информацию о...

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

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



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

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

З.Ы. кажется дошел смысл))
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
14.12.2012, 03:03 #8
9cbka, есть объект - он имеет свойства. При наследовании мы показываем, что один объект является другим объектом. Так почему большее не должно содержать части из меньшего?
0
0x10
2485 / 1660 / 249
Регистрация: 24.11.2012
Сообщений: 4,136
14.12.2012, 05:21 #9
Как же тут не выделить память.

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
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
14.12.2012, 22:44  [ТС] #10
Цитата Сообщение от 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
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,245
14.12.2012, 22:52 #11
Цитата Сообщение от 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
14.12.2012, 22:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2012, 22:52
Привет! Вот еще темы с ответами:

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

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

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

Интересное задание... - Pascal
Определить какая сумма элементов больше, расположенная до максимального элемента или после. вот что у меня вышло: var a:arrayof...


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

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

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