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

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

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

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

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

При наследовании происходит ли наследование конструкторов и деструкторов базового класса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 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
Эксперт С++
3039 / 1684 / 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
1085 / 760 / 58
Регистрация: 01.02.2011
Сообщений: 1,774
Записей в блоге: 1
14.01.2016, 15:16     Наследуются ли конструкторы и деструкторы? #63
Цитата Сообщение от Kastaneda Посмотреть сообщение
вот так надо
с тем же успехом можно конструктор базового класса вызвать (уже до этого приводил код):
C++
1
B *j = (B*)(new B::A()); // можно вызвать конструктор базового класса, но при этом будет создан объект базового класса, а не производного
но при этом он не наследуется, а переопределяемые функции наследуются
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 15:28     Наследуются ли конструкторы и деструкторы? #64
Цитата Сообщение от kzru_hunter Посмотреть сообщение
методы, которые были переопределены в производном классе, не наследуются (но об этом везде молчок):
Они наследуются, просто их имена скрыты.

Добавлено через 3 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
А что вообще понимается под "члены наследуется"
Я ж и говорю, Страуструп нас уже на стадии определений запутал, и из этого лабиринта нет выхода!
kzru_hunter
1085 / 760 / 58
Регистрация: 01.02.2011
Сообщений: 1,774
Записей в блоге: 1
14.01.2016, 15:30     Наследуются ли конструкторы и деструкторы? #65
Цитата Сообщение от Mr.X Посмотреть сообщение
Они наследуются, просто их имена скрыты.
Вот и я том же. Конструктор базового класса таким же образом скрыт, как и все переопределяемые функции.
SmittWesson
120 / 169 / 17
Регистрация: 04.06.2014
Сообщений: 1,273
14.01.2016, 15:50     Наследуются ли конструкторы и деструкторы? #66
Цитата Сообщение от rar14 Посмотреть сообщение
При наследовании происходит ли наследование конструкторов и деструкторов базового класса?
Наследуется всё. Иначе, на кой они тогда нужны?
SmittWesson
120 / 169 / 17
Регистрация: 04.06.2014
Сообщений: 1,273
14.01.2016, 15:53     Наследуются ли конструкторы и деструкторы? #67
Цитата Сообщение от Mr.X Посмотреть сообщение
Я ж и говорю, Страуструп нас уже на стадии определений запутал, и из этого лабиринта нет выхода!
Никого он не путал. Это Вы себе намыслили чего-то, а Страуструп "виноват"! Нормалёк!
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 1
14.01.2016, 16:00     Наследуются ли конструкторы и деструкторы? #68
Цитата Сообщение от SmittWesson Посмотреть сообщение
Наследуется всё.
Страуструп обратное говорит
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 1
14.01.2016, 16:03     Наследуются ли конструкторы и деструкторы? #69
Я все таки нагуглил о чем говорил Страуструп
Заметьте, что если вы не определите оператор копирующего присваивания, он будет сгенерирован компилятором. Отсюда следует, что операторы присваивания не наследуются. Конструкторы никогда не наследуются.
Теперь сообща вдумаемся в прочитанное... Да, конструкторы не наследуются!
kzru_hunter
1085 / 760 / 58
Регистрация: 01.02.2011
Сообщений: 1,774
Записей в блоге: 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
6011 / 2451 / 437
Регистрация: 15.11.2014
Сообщений: 5,430
Завершенные тесты: 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
6011 / 2451 / 437
Регистрация: 15.11.2014
Сообщений: 5,430
Завершенные тесты: 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Эксперт С++
12730 / 7190 / 802
Регистрация: 27.09.2012
Сообщений: 17,739
Записей в блоге: 2
Завершенные тесты: 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 ]
hoggy
6011 / 2451 / 437
Регистрация: 15.11.2014
Сообщений: 5,430
Завершенные тесты: 1
14.01.2016, 18:58     Наследуются ли конструкторы и деструкторы? #76
Цитата Сообщение от kzru_hunter Посмотреть сообщение
но при этом он не наследуется, а переопределяемые функции наследуются
то бишь функционально он рабочий, доступный
но его как бе нет, да?

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

Цитата Сообщение от kzru_hunter Посмотреть сообщение
Вот и я том же. Конструктор базового класса таким же образом скрыт, как и все переопределяемые функции.
скрыт != не наследуется.

формально и физически они существуют.
в некоторых случаях, наследник может получать к ним доступ,
и получать профит.

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

Цитата Сообщение от mporro Посмотреть сообщение
Давайте поиграем в игру.
не давайте.
мне лень цитировать сюда виккипедию.

Цитата Сообщение от mporro Посмотреть сообщение
То есть, формальное определение объекта такое: объект -- это произвольный набор последовательных адресов. Так?
фраза, которая начинается с "то есть" - логическое следование.
у вас какая то странная логика.
мне решительно не понятно,
откуда вы берете свои домыслы.

фраза:
Цитата Сообщение от hoggy Посмотреть сообщение
объект - кусок памяти.
не дает вам никаких оснований делать выводы
относительно природы адресов куска памяти.

Цитата Сообщение от mporro Посмотреть сообщение
Или цитату из Страуструпа приведёте?
тут вроде по-русски написанно, не?
Цитата Сообщение от hoggy Посмотреть сообщение
(ц)Страуструп.
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 19:27     Наследуются ли конструкторы и деструкторы? #77
Цитата Сообщение от mporro Посмотреть сообщение
Это что-то, что не является объектом целого числа. Целое число можно сложить с другим целым. А неинициализированное целое -- нет. Его можно только инициализировать, больше ничего с ним сделать нельзя.
Ну, я рад, что вы со мной согласились. Именно так. Неинициализированный объект можно только инициализировать, а инициализированный можно использовать. Для этого конструкторы и придуманы. А объекты встроенного типа рекомендуется инициализировать сразу при объявлении.

Добавлено через 15 минут
Цитата Сообщение от hoggy Посмотреть сообщение
RAII жеж, конструктор и есть инициализатор.
Ну дак некоторые думают, что конструктор создает объект, на самом деле сначала объект создается, а потом для него вызывается конструктор.
Croessmah
Модератор
Эксперт CЭксперт С++
12730 / 7190 / 802
Регистрация: 27.09.2012
Сообщений: 17,739
Записей в блоге: 2
Завершенные тесты: 1
14.01.2016, 19:30     Наследуются ли конструкторы и деструкторы? #78
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну дак некоторые думают, что конструктор создает объект
Тогда для них
constructor is used to initialize objects of its class type. Because constructors do not have names, they are never found during name lookup; however an explicit type conversion using the functional notation (5.2.3) will cause a constructor to be called to initialize an object.
hoggy
6011 / 2451 / 437
Регистрация: 15.11.2014
Сообщений: 5,430
Завершенные тесты: 1
14.01.2016, 19:46     Наследуются ли конструкторы и деструкторы? #79
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну дак некоторые думают, что конструктор создает объект, на самом деле сначала объект создается, а потом для него вызывается конструктор.
технически, конструктор - просто функция,
задача которой - наполнить содержимое памяти
чем то осмысленным.

однако, с точки зрения дизайна языка,
нет конструктора - нет ресурса.
технически, объект конечно же может существовать в отрыве от конструктора.

вот только в отрыве от конструктора он практически бесполезен.
и в большинстве случаев у нас вообще не будет к нему доступа.
(например, в случае аварийного завершения конструктора,
мы либо теряем связь с объектом,
либо теряем весь процесс).

поэтому, думаю, для упрощения восприятия,
вполне допустимо полагать,
что конструкторы порождают инициализированные объекты.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2016, 20:43     Наследуются ли конструкторы и деструкторы?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 20:43     Наследуются ли конструкторы и деструкторы? #80
Цитата Сообщение от hoggy Посмотреть сообщение
и заполнил кусок памяти чем то осмысленным.
Именно! Чем-то осмысленным!

Страуструп не мог написать такой ерунды, как "объект -- кусок памяти", потому я попросил цитату:
• A type defines a set of possible values and a set of operations (for an object).
• An object is some memory that holds a value of some type.
• A value is a set of bits interpreted according to a type.
• A variable is a named object.
Если что-то не инициализированно, там никакого разумного значения нет. Значит и объекта нет.

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

Цитата Сообщение от Croessmah Посмотреть сообщение
Цитата из стандарта подойдет?
Нет, из стандарта не подойдёт.
Yandex
Объявления
14.01.2016, 20:43     Наследуются ли конструкторы и деструкторы?
Ответ Создать тему
Опции темы

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