Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
9cbka
2 / 2 / 4
Регистрация: 13.10.2012
Сообщений: 60
1

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

14.12.2012, 01:11. Просмотров 938. Ответов 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
Ответы с готовыми решениями:

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

Сколько памяти выделяется под структурную переменную
Подскажите, пожалуйста. Сколько памяти выделяется под структурную переменную...

Интересное задание (Определить стоимость проезда на трамвае)
Определить стоимость проезда на трамвае. Университетское задание для...

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

Разработка программы обмена местами двух целочисленных ячеек памяти без использования дополнительной памяти
Разработка программы обмена местами двух целочисленных ячеек памяти без...

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

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



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

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

З.Ы. кажется дошел смысл))
0
MrGluck
Модератор
Эксперт CЭксперт С++
8088 / 4941 / 1431
Регистрация: 29.11.2010
Сообщений: 13,403
14.12.2012, 03:03 8
9cbka, есть объект - он имеет свойства. При наследовании мы показываем, что один объект является другим объектом. Так почему большее не должно содержать части из меньшего?
0
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,380
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 / 4
Регистрация: 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
Модератор
7275 / 5528 / 693
Регистрация: 14.02.2011
Сообщений: 18,727
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

Переменные в динамической памяти!
подскажите как реализовать такое задание: Разместите в динамической памяти две...

Размер ячеек памяти
Каков размер ячеек памяти? Вычитал, что одна ячейка равна одному байту. Но тут...

Выделение памяти под глобальные переменные
Кто - нибудь объясните мне не ведающему почему так: Имеется структура с таким...


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

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

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