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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.93
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
#1

Наследуются ли конструкторы и деструкторы? - C++

02.06.2009, 14:54. Просмотров 7596. Ответов 124
Метки нет (Все метки)

При наследовании происходит ли наследование конструкторов и деструкторов базового класса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2009, 14:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследуются ли конструкторы и деструкторы? (C++):

Наследуются ли конструкторы? - C++
Привет. Хочу спросить, если базовый класс имеет открытый конструктор по умолчанию, то при открытом наследовании будет ли создан...

Почему не наследуются конструкторы? - C++
Здравствуйте. Гугл говорит, что конструкторы в C++ унаследовать никак нельзя. Почему так? В чём проблема с их наследованием? Хотел...

Конструкторы и деструкторы - C++
Помогите, пожалуйста, исправить программу и закончить ее как надо. Необходимо реализовать класс с двумя полями, имеющими имена first и...

Конструкторы и деструкторы - C++
Здравствуйте уважаемые программисты, помогите пожалуйста новичку? Не могу разобраться в программе, где смог там написал комментарий и то не...

Конструкторы и деструкторы - C++
Не понимаю, как закончить программу. Написала конструктор и деструктор, хотя он тут и не нужен по идее. Но по заданию сделала. А как...

Конструкторы и деструкторы - C++
Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны присутствовать: Для инициализации...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4518 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,267
Записей в блоге: 2
Завершенные тесты: 1
14.01.2016, 14:53 #61
Цитата Сообщение от kzru_hunter Посмотреть сообщение
что и методы, которые были переопределены в производном классе, не наследуются (но об этом везде молчок):
Цитата Сообщение от kzru_hunter Посмотреть сообщение
b.func(4,4); // ошибка: функция не принимает 2 аргументов
вот так надо
C++
1
b.A::func(4, 4);
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 15:12 #62
Цитата Сообщение от mporro Посмотреть сообщение
Если я напишу
Ну, не знаю что вы там такое пишете...
Цитата Сообщение от mporro Посмотреть сообщение
Без инициализации нельзя назвать область памяти объектом в том смысле, в котором мы понимаем его, упоминая объектно-ориентированное программирования.
Ну почему же нельзя, когда именно можно? Это будет просто неинициализированный объект.
C++
1
2
3
4
5
int     main()
{
    int     a;//Учитесь, как надо целые неинициализированные объекты объявлять!
    a   =   1;//Теперь он уже и проинициализирован.
}
kzru_hunter
1090 / 765 / 58
Регистрация: 01.02.2011
Сообщений: 1,775
Записей в блоге: 1
14.01.2016, 15:16 #63
Цитата Сообщение от Kastaneda Посмотреть сообщение
вот так надо
с тем же успехом можно конструктор базового класса вызвать (уже до этого приводил код):
C++
1
B *j = (B*)(new B::A()); // можно вызвать конструктор базового класса, но при этом будет создан объект базового класса, а не производного
но при этом он не наследуется, а переопределяемые функции наследуются
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 15:28 #64
Цитата Сообщение от kzru_hunter Посмотреть сообщение
методы, которые были переопределены в производном классе, не наследуются (но об этом везде молчок):
Они наследуются, просто их имена скрыты.

Добавлено через 3 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
А что вообще понимается под "члены наследуется"
Я ж и говорю, Страуструп нас уже на стадии определений запутал, и из этого лабиринта нет выхода!
kzru_hunter
1090 / 765 / 58
Регистрация: 01.02.2011
Сообщений: 1,775
Записей в блоге: 1
14.01.2016, 15:30 #65
Цитата Сообщение от Mr.X Посмотреть сообщение
Они наследуются, просто их имена скрыты.
Вот и я том же. Конструктор базового класса таким же образом скрыт, как и все переопределяемые функции.
SmittWesson
120 / 169 / 17
Регистрация: 04.06.2014
Сообщений: 1,288
14.01.2016, 15:50 #66
Цитата Сообщение от rar14 Посмотреть сообщение
При наследовании происходит ли наследование конструкторов и деструкторов базового класса?
Наследуется всё. Иначе, на кой они тогда нужны?
SmittWesson
120 / 169 / 17
Регистрация: 04.06.2014
Сообщений: 1,288
14.01.2016, 15:53 #67
Цитата Сообщение от Mr.X Посмотреть сообщение
Я ж и говорю, Страуструп нас уже на стадии определений запутал, и из этого лабиринта нет выхода!
Никого он не путал. Это Вы себе намыслили чего-то, а Страуструп "виноват"! Нормалёк!
Kastaneda
Форумчанин
Эксперт С++
4518 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,267
Записей в блоге: 2
Завершенные тесты: 1
14.01.2016, 16:00 #68
Цитата Сообщение от SmittWesson Посмотреть сообщение
Наследуется всё.
Страуструп обратное говорит
Kastaneda
Форумчанин
Эксперт С++
4518 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,267
Записей в блоге: 2
Завершенные тесты: 1
14.01.2016, 16:03 #69
Я все таки нагуглил о чем говорил Страуструп
Заметьте, что если вы не определите оператор копирующего присваивания, он будет сгенерирован компилятором. Отсюда следует, что операторы присваивания не наследуются. Конструкторы никогда не наследуются.
Теперь сообща вдумаемся в прочитанное... Да, конструкторы не наследуются!
kzru_hunter
1090 / 765 / 58
Регистрация: 01.02.2011
Сообщений: 1,775
Записей в блоге: 1
14.01.2016, 16:23 #70
Цитата Сообщение от Kastaneda Посмотреть сообщение
Заметьте, что если вы не определите оператор копирующего присваивания, он будет сгенерирован компилятором. Отсюда следует, что операторы присваивания не наследуются.
Все равно не понял. Ну будет сгенерирован и что? Доступ к оператору копирующего присваивания базового класса все равно останется, будет просто скрыт.
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 16:47 #71
Цитата Сообщение от Mr.X Посмотреть сообщение
Учитесь, как надо целые неинициализированные объекты объявлять!
Вы же сказали, что объект -- это выделенная область памяти, связанная с именем.
Я задал имя, связал с ним память.
Почему в вашем случае a -- объект, а моё i -- не объект?

Цитата Сообщение от Mr.X Посмотреть сообщение
Это будет просто неинициализированный объект
Это что-то, что не является объектом целого числа. Целое число можно сложить с другим целым. А неинициализированное целое -- нет. Его можно только инициализировать, больше ничего с ним сделать нельзя.

Добавлено через 7 минут
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Ну будет сгенерирован и что?
Страуструп имеет в виду, что если бы конструктор был унаследован, то не требовалось бы его генерировать. Все сообщения экземпляру класса наследника о конструировании сразу передавались бы экземпляру базового класса.
Однако это принципиально невозможно, если только наследник вообще ничего не добавляет к базовому классу, так как базовый класс не может быть компетентен даже в том, сколько выделить памяти под дочерний объект. Не говоря уже о том, что базовых классов может быть много...
hoggy
6531 / 2711 / 468
Регистрация: 15.11.2014
Сообщений: 5,986
Завершенные тесты: 1
14.01.2016, 18:28 #72
Цитата Сообщение от mporro Посмотреть сообщение
Опять у фас какие-то фантазии начинаются, на почве С++
очень глупо называть фантазиями факты.
наследник наследует все члены базового класса независимо от того,
будет ли он иметь доступ к этим членам, или нет.

Цитата Сообщение от mporro Посмотреть сообщение
Согласно вашим фантазиям ниже идёт наследование...
если только согласно вашим фантазиям,
в рамках Вашей странной логики.

согласно моей логике, агрегация - альтернативный способ поиметь функционал.
при котором поимеется весь функционал агрегируемого класса.

Цитата Сообщение от Mr.X Посмотреть сообщение
здесь у Страуструпа тоже терминологический ляп, так как конструктором он назвал то, что фактически является инициализатором.
RAII жеж, конструктор и есть инициализатор.

Добавлено через 1 минуту
Цитата Сообщение от mporro Посмотреть сообщение
Из такого взгляда на объект получается, что расчищенная площадка -- это уже дом.
объект - кусок памяти.
(ц)Страуструп.
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 18:40 #73
Цитата Сообщение от hoggy Посмотреть сообщение
если только согласно вашим фантазиям
Давайте поиграем в игру.
Вы даёте чёткое формальное определение наследования и отличия от агрегации.

Цитата Сообщение от hoggy Посмотреть сообщение
объект - кусок памяти
То есть, формальное определение объекта такое: объект -- это произвольный набор последовательных адресов. Так? Или Вы как-то ещё сформулируете? Или цитату из Страуструпа приведёте?
hoggy
6531 / 2711 / 468
Регистрация: 15.11.2014
Сообщений: 5,986
Завершенные тесты: 1
14.01.2016, 18:48 #74
Цитата Сообщение от Kastaneda Посмотреть сообщение
или как там у классиков
если вы про ООП - сущность,
наделенная свойствами и умениями

Цитата Сообщение от mporro Посмотреть сообщение
Я могу только о том говорить, что был создан кусок памяти. Но я не могу утверждать, что этот кусок -- целое число, там вполне может оказаться trapped representation. Без инициализации нельзя назвать область памяти объектом в том смысле, в котором мы понимаем его, упоминая объектно-ориентированное программирования.
объект денотирует (обозначает) имя. имя обладает типом.
тип определяет смысл того содержимого, что будет в нем обнаружено.
(ц)Страуструп
если раскрыть этот тезис:
доступ к объекту можно осуществлять
при помощи множества различных имен,
которые могут иметь множество разных типов,
а следовательно, поимеем множество интерпретаций содержимого объекта.
но это все - ерунда.

важен тип имени, которое денотировало объект.
именно это имя и задает "истинный" тип объекта.
потому что именно оно определяет тип
конструктора, который был запущен,
и заполнил кусок памяти чем то осмысленным.

другими словами именно это первичное имя
определяет "истинное" содержимое объекта.

Цитата Сообщение от kzru_hunter Посмотреть сообщение
то получается, что и методы, которые были переопределены в производном классе, не наследуются (но об этом везде молчок):
все там прекрасно наследуется.
методы наследника могут скрывать собой базовые.
тем не менее, при желании, вы можете получить к ним доступ:

C++
1
2
3
der obj;
obj.work(); // <--- der::work
obj.base::work(); //<--- base::work

Цитата Сообщение от kzru_hunter Посмотреть сообщение
Что вообще понимается под выражением: конструкторы, деструкторы и т.д. не наследуются?
бред неосиляторов, полагаю.
Croessmah
Модератор
Эксперт CЭксперт С++
13132 / 7395 / 828
Регистрация: 27.09.2012
Сообщений: 18,217
Записей в блоге: 3
Завершенные тесты: 1
14.01.2016, 18:53 #75
Цитата Сообщение от mporro Посмотреть сообщение
То есть, формальное определение объекта такое: объект -- это произвольный набор последовательных адресов. Так? Или Вы как-то ещё сформулируете? Или цитату из Страуструпа приведёте?
Цитата из стандарта подойдет?
An object is a region of storage. [ Note: A function is not an object, regardless of whether or not it occupies storage in the way that objects do. — end note ]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2016, 18:53
Привет! Вот еще темы с ответами:

Конструкторы и деструкторы - C++
Код: #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; class complex { private: double im; double...

Конструкторы и деструкторы - C++
Помогите исправить программу. Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны...

Конструкторы и деструкторы - C++
Прочитал про конструкторы и деструкторы. Пишут что они нужны для инициализации переменных класса. Как они используются я понял, но не понял...

Конструкторы и деструкторы - C++
Привет. Есть структура, содержащая 7 полей, в которые я ввожу значения с клавиатуры. Нужно используя конструкторы и деструкторы...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.01.2016, 18:53
Ответ Создать тему
Опции темы

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