Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
14.12.2012, 01:11     Интересное задание (Сколько ячеек памяти выделится под переменные?) #1
Дан такой код:
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-переменные?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
14.12.2012, 01:31     Интересное задание (Сколько ячеек памяти выделится под переменные?) #2
а зачем писать переменную, которую не надо использовать? и где гарантия, что она не используется в классе А?
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
14.12.2012, 02:22  [ТС]     Интересное задание (Сколько ячеек памяти выделится под переменные?) #3
Именно для этого случая.

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



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

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

З.Ы. кажется дошел смысл))
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
14.12.2012, 03:03     Интересное задание (Сколько ячеек памяти выделится под переменные?) #8
9cbka, есть объект - он имеет свойства. При наследовании мы показываем, что один объект является другим объектом. Так почему большее не должно содержать части из меньшего?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
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;
}
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;
}
Вы не поняли мой вопрос. Но я уже нашел ответ.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2012, 22:52     Интересное задание (Сколько ячеек памяти выделится под переменные?)
Еще ссылки по теме:

C++ Сколько памяти выделяется под структурную переменную
C++ Придумайте, пожалуйста, задание с классами - только интересное
C++ Выделится ли память?

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
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;
}
Yandex
Объявления
14.12.2012, 22:52     Интересное задание (Сколько ячеек памяти выделится под переменные?)
Ответ Создать тему
Опции темы

Текущее время: 01:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru