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

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

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

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

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

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

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

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

10
I.M.
566 / 549 / 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.
566 / 549 / 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Эксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,240
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Эксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,240
14.12.2012, 03:03 #8
9cbka, есть объект - он имеет свойства. При наследовании мы показываем, что один объект является другим объектом. Так почему большее не должно содержать части из меньшего?
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
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
Модератор
7128 / 5396 / 669
Регистрация: 14.02.2011
Сообщений: 18,213
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
Привет! Вот еще темы с решениями:

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

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

Выделением памяти под переменные собственного класса
Создаю указатель собственного типа, выделяю память - ошибка &quot;Write to Adress...

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


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

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

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