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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,384
#1

Вопросы по наследованию - C++

20.06.2013, 12:43. Просмотров 1791. Ответов 68
Метки нет (Все метки)

Вопрос ещё по конструкторам

Допустим есть система классов
C++
1
2
3
4
5
6
7
8
9
10
class A
{
    public:
         A() {}
};
class B: public A
{
    public:
         B() {}
};
Мы создаем экземпляр
C++
1
B b_obj;
Сколько будет фактически экземпляров? 1 B? или 2: A и B?
Или экземпляр A будет создан только если конструктор B вызывает конструктор A?
C++
1
B() : A() {}
И ещё вопрос. Предположим два экземпляра будет если конструктор B вызывает конструктор A
Пусть есть открытая переменная в A
C++
1
2
public:
    int a;
При обращении из экземпляра
C++
1
b_obj.a = 0;
Мы обратимся к a из экземпляра B или из экземпляра A?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2013, 12:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопросы по наследованию (C++):

Вопрос по наследованию - C++
Вопрос насчёт передачи аргументов в конструктор базового класса(создания временного объекта), а именно почему у меня это не выходит и где у...

Вопрос по наследованию - C++
Уже неоднократно перечитывал главы про наследования и все равно до конца не разобрался. Вот например у нас есть класс Четырехугольник, и...

Задание по наследованию классов - C++
Создать иерархию классов : линия - прямоугольник - пирамида. Все классы должны содержать методы для фиксации и получения значений всех...

Задача по наследованию в C++, нужно реализовать некоторые моменты - C++
Написать программу с объектами и реализовать наследование. Ситуация: Klimat (базовый объект), Derevo (выводной объект). a. Klimat:...

Задача по наследованию. Не понимаю некоторые моменты в формулировке задания - C++
Здравствуйте! Вот есть задание: Описать базовый класс СТРОКА Обязательные поля класса: # Указатель на char - хранит адрес...

"Предпочитайте композицию наследованию" - C++
Привет. В книге "Стандарты программирования на С++" есть совет 34: "Предпочитайте композицию наследованию" Хочу уточнить на счет...

68
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,077
20.06.2013, 12:54 #2
Цитата Сообщение от pizurok Посмотреть сообщение
Сколько будет фактически экземпляров? 1 B? или 2: A и B?
один B
но к нему можно обратится как к A
например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A
{
public:
int a;
int b;
}
 
class C: public A
{
public:
int c;
}
 
C obj;
в памяти будет лежать
a b c
причем a b достались от класса A

и если
обратится к объекту как к C то можешь достучатся до всех трех членов
а если как к A то до члена c не достучишься (класс A не знает такого члена)
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,384
20.06.2013, 13:01  [ТС] #3
Цитата Сообщение от ValeryS Посмотреть сообщение
и если
обратится к объекту как к C то можешь достучатся до всех трех членов
а если как к A то до члена c не достучишься (класс A не знает такого члена)
Это я знаю, не первый день программирую на плюсах, я спрашивал другое.

При обращении из экземпляра
C++
1
b_obj.a = 0;
Мы обратимся к a из экземпляра B или из экземпляра A?
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 13:16 #4
Цитата Сообщение от pizurok Посмотреть сообщение
Или экземпляр A будет создан только если конструктор B вызывает конструктор A?
Конструктор не создаёт объкты, а инициализирует. В объекте производного класса всегда присутствует объект базового класса. Сначала должен быть инициализирован объект базового класса, поэтому конструктор базового класса всегда вызвывается (явно, через список инициализаторов, или не явно ) перед вызовом конструктора производного класса.

Добавлено через 4 минуты
Цитата Сообщение от pizurok Посмотреть сообщение
Мы обратимся к a из экземпляра B или из экземпляра A?
Из B.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,534
Завершенные тесты: 1
20.06.2013, 13:26 #5
Вопросы по наследованию
Или я чего-то не понял?
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,534
Завершенные тесты: 1
20.06.2013, 13:32 #6
Или даже вот так:
Вопросы по наследованию
0
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,069
20.06.2013, 13:33 #7
SatanaXIII, конструкторы вызываются начиная с корня иерархии.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,534
Завершенные тесты: 1
20.06.2013, 13:34 #8
Цитата Сообщение от 0x10 Посмотреть сообщение
конструкторы вызываются начиная с корня иерархии.
Я как раз и об этом.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 13:53 #9
В первом коде, если exB ->a и exB ->b закоментировть?

Добавлено через 1 минуту
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Я как раз и об этом.
А кто сказал другое?
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,384
20.06.2013, 13:58  [ТС] #10
Цитата Сообщение от alsav22 Посмотреть сообщение
Конструктор не создаёт объкты, а инициализирует. В объекте производного класса всегда присутствует объект базового класса. Сначала должен быть инициализирован объект базового класса, поэтому конструктор базового класса всегда вызвывается (явно, через список инициализаторов, или не явно ) перед вызовом конструктора производного класса.
Спасибо, вот этого ответа я ждал
Цитата Сообщение от alsav22 Посмотреть сообщение
Из B.
Тогда как обратится к переменной a из экземпляра A?
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 14:14 #11
Цитата Сообщение от pizurok Посмотреть сообщение
Тогда как обратится к переменной a из экземпляра A?
Так же. Создайте экземпляр А и обращайтесь (к полю этого объекта).

Добавлено через 7 минут
Если же имеется ввиду экземпляр А, который является частью В, то он не является отдельным объектом.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,534
Завершенные тесты: 1
20.06.2013, 14:15 #12
Цитата Сообщение от alsav22 Посмотреть сообщение
В первом коде, если exB ->a и exB ->b закоментировть?
Аг-га.
Цитата Сообщение от alsav22 Посмотреть сообщение
А кто сказал другое?
Занимаюсь иллюстрациями.
Цитата Сообщение от alsav22 Посмотреть сообщение
Так же. Создайте экземпляр А и обращайтесь (к полю этого объекта).
А вот тут как раз раскомментировать.
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,384
20.06.2013, 14:21  [ТС] #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Если же имеется ввиду экземпляр А, который является частью В, то он не является отдельным объектом.
Вот тут у меня и настает уровень непонимания. Экземпляр B создает экземпляр A, но тот не является отдельным объектом, а чем он тогда является? Два объекта объединяются каким-то магическим образом в один?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
20.06.2013, 14:24 #14
Вот вы являетесь мужчиной из Беларусии, что является подмножеством всех мужчин. То, что вы принадлежите к первому нисколько не противоречит, и даже влечет то, что вы относитесь и ко второму.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 14:25 #15
Цитата Сообщение от pizurok Посмотреть сообщение
Экземпляр B создает экземпляр A
Нет. Содаётся один объект В. Если В наследник А, то в таком объекте, как часть, будет и А.
Цитата Сообщение от pizurok Посмотреть сообщение
а чем он тогда является?
Частью В.

Цитата Сообщение от pizurok Посмотреть сообщение
Два объекта объединяются каким-то магическим образом в один?
Да. Магия называется: наследование.
0
20.06.2013, 14:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2013, 14:25
Привет! Вот еще темы с ответами:

Написать простейшую программу по "перегрузке" и "наследованию" - C++
написать простейшую программу на СИ++ по "перегрузке" и "наследованию". заранее спасибо!

Вопросы по C++ - C++
Всем привет! У меня появилось несколько вопросов по C++, был бы рад, если бы Вы помогли бы мне хотя бы из одним из них. 1) Как...

Вопросы - C++
Ребята, никто не писал никогда код на С++, связанный с имитационным моделированием? Просто, дали, там набор математич. формул и теория, а...

Вопросы!!! - C++
прошу посоветовать что почитать чтобы ответить на следующие вопросы!!(можно ответить ссылками) если будут промеры по теме буду рад:) ...


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

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

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