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

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

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

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

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

При наследовании происходит ли наследование конструкторов и деструкторов базового класса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
2377 / 1071 / 234
Регистрация: 30.11.2013
Сообщений: 3,555
15.01.2016, 20:24     Наследуются ли конструкторы и деструкторы? #121
Так если вернутся к вопросу наследуется ли конструктор: ответ таков -
автор языка давай ответ нет не наследуется, но в то же время понятие что такое наследование говорит, что конструктор как метод должен наследоваться. И к тому же using A::A; это не наследование а указание компилятору сделать imlementation для derivered с вызовом base
Добавлено через 12 минут
P.P. если тема перейдет в одностороннюю "не наследуется" из-за блока hoggy, я официально поверю в существование масонов. hoggy братишь живи! Ты один приводил доводы в этом холиваре за версию "наследуется"
rikimaru2013
C++ Game Dev
2377 / 1071 / 234
Регистрация: 30.11.2013
Сообщений: 3,555
15.01.2016, 20:33     Наследуются ли конструкторы и деструкторы? #122
Я кстати тоже попытаюсь вставить -
что такое наследование если абстрагироваться? Класс Б является классом А. Ученый является человеком. Получается так как существует делигирование конструкторов класс Б говорит, так как я являюсь и классом А, пусть часть членов, которые я унаследовал от А, будут инициализированы конструктором А. Как я могу являтся классом А, передавать ему часть инициализации, если мы не приобрели с наследованием весь класс А ?
zoom59rus
6 / 6 / 3
Регистрация: 09.02.2015
Сообщений: 45
Завершенные тесты: 1
15.01.2016, 22:53     Наследуются ли конструкторы и деструкторы? #123
По идее, при создании наследуемого класса, он получает все от родителя, и добавляет свои "фишки".
Но! Так как он наследник, инициализацию своих членов может произвести как ему угодно, тогда как
инициализацию членов родителя, может произвести строго в соответствии с реализацией конструкторов родителя.
Получается, что конструктор наследуется, но с "жесткой" реализацией конструкторов родителя.
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,950
Записей в блоге: 2
Завершенные тесты: 1
15.01.2016, 23:04     Наследуются ли конструкторы и деструкторы? #124
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
если мы не приобрели с наследованием весь класс А ?
ну так конструктор ученого просит конструктор человека, -
"Эй, я тоже человек, пожалуйста, приведи себя в порядок, чтобы я мог стать ученым".
Просит, но не говорит, - "Я ученый, и сам соберу человека".
Собственно, Франкенштейн получается.
Заметьте, что кроме специальных членов класса, никто не дергает родителя.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2016, 09:54     Наследуются ли конструкторы и деструкторы?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
kzru_hunter
1087 / 762 / 58
Регистрация: 01.02.2011
Сообщений: 1,775
Записей в блоге: 1
07.02.2016, 09:54     Наследуются ли конструкторы и деструкторы? #125
Вообщем, mporro правильно писал про наследование.
Объект производного класса, унаследованного от одного какого-нибудь базового класса, содержит неименованный подобъект базового класса.
Объект производного класса, унаследованного от двух базовых классов (множественное наследование), содержит два неименованных подобъекта, относящихся к этим базовым классам.
Получается, такое отношение называется has a (содержит), а не is a (является). Т.е объект производного класса содержит реализацию базового класса при простом наследовании или нескольких базовых классов при множественном наследовании.
Чтобы объект смог достучаться до своих неименованных подобъектов, он должен использовать оператор расширения видимости, например так: объект->Base::f()
Помимо реализации производному классу ещё достаётся и интерфейс базового класса, т.е. интерфейс базового класса переходит в интерфейс САМОГО производного класса (не путать с интерфейсом при обращении к подобъектам). Т.е. если в базовом классе есть метод Base->f(), то в производный класс он перейдёт как Derived->f(). По сути, объект этого производного класса при обращении к f() будет вызывать функцию f() своего подобъекта. Если бы интерфейс функции f() базового класса не унаследовался бы в производный класс, то у нас не было бы возможности вызвать эту функцию через сам объект производного класса derivedObj->f(), но была бы возможность её вызвать через интерфейс его подбъекта derivedObj->подобъект->f(), т.е на C++ было выглядело так: derivedObj->Base::f()
Как раз интерфейс конструктора, деструктора и оператора присваивания не наследуется. А всё из-за того, что компилятор всегда генерирует для производного класса свои версии конструктора, деструктора и копирующего оператора присваивания, даже если они не были определены явно в классе. Т.е. в производном класса всегда имеется интерфейс к своим конструктору, деструктору, копирующему оператору присваивания, из-за чего интерфейс с версиями конструкторов, деструктора и операторов присваивания базового класса не может быть унаследован, т.к. если в производном классе есть функция с тем же именем, что и в базовом, то она перекрывает все функции базового класса с тем же именем в независимости от сигнатуры.
Yandex
Объявления
07.02.2016, 09:54     Наследуются ли конструкторы и деструкторы?
Ответ Создать тему
Опции темы

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