Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/124: Рейтинг темы: голосов - 124, средняя оценка - 4.81
29 / 23 / 2
Регистрация: 14.04.2009
Сообщений: 448

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

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

Студворк — интернет-сервис помощи студентам
При наследовании происходит ли наследование конструкторов и деструкторов базового класса?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2009, 14:54
Ответы с готовыми решениями:

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

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

Конструкторы и деструкторы
Создать класс LongLong для работы с целыми числами из 64 бит. Число должно быть представлено двумя полями: long — старшая часть, unsigned...

124
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
14.01.2016, 14:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от kzru_hunter Посмотреть сообщение
что и методы, которые были переопределены в производном классе, не наследуются (но об этом везде молчок):
Цитата Сообщение от kzru_hunter Посмотреть сообщение
b.func(4,4); // ошибка: функция не принимает 2 аргументов
вот так надо
C++
1
b.A::func(4, 4);
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 15:12
Цитата Сообщение от mporro Посмотреть сообщение
Если я напишу
Ну, не знаю что вы там такое пишете...
Цитата Сообщение от mporro Посмотреть сообщение
Без инициализации нельзя назвать область памяти объектом в том смысле, в котором мы понимаем его, упоминая объектно-ориентированное программирования.
Ну почему же нельзя, когда именно можно? Это будет просто неинициализированный объект.
C++
1
2
3
4
5
int     main()
{
    int     a;//Учитесь, как надо целые неинициализированные объекты объявлять!
    a   =   1;//Теперь он уже и проинициализирован.
}
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
14.01.2016, 15:16
Цитата Сообщение от Kastaneda Посмотреть сообщение
вот так надо
с тем же успехом можно конструктор базового класса вызвать (уже до этого приводил код):
C++
1
B *j = (B*)(new B::A()); // можно вызвать конструктор базового класса, но при этом будет создан объект базового класса, а не производного
но при этом он не наследуется, а переопределяемые функции наследуются
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 15:28
Цитата Сообщение от kzru_hunter Посмотреть сообщение
методы, которые были переопределены в производном классе, не наследуются (но об этом везде молчок):
Они наследуются, просто их имена скрыты.

Добавлено через 3 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
А что вообще понимается под "члены наследуется"
Я ж и говорю, Страуструп нас уже на стадии определений запутал, и из этого лабиринта нет выхода!
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
14.01.2016, 15:30
Цитата Сообщение от Mr.X Посмотреть сообщение
Они наследуются, просто их имена скрыты.
Вот и я том же. Конструктор базового класса таким же образом скрыт, как и все переопределяемые функции.
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
14.01.2016, 15:50
Цитата Сообщение от rar14 Посмотреть сообщение
При наследовании происходит ли наследование конструкторов и деструкторов базового класса?
Наследуется всё. Иначе, на кой они тогда нужны?
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
14.01.2016, 15:53
Цитата Сообщение от Mr.X Посмотреть сообщение
Я ж и говорю, Страуструп нас уже на стадии определений запутал, и из этого лабиринта нет выхода!
Никого он не путал. Это Вы себе намыслили чего-то, а Страуструп "виноват"! Нормалёк!
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
14.01.2016, 16:00
Цитата Сообщение от SmittWesson Посмотреть сообщение
Наследуется всё.
Страуструп обратное говорит
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
14.01.2016, 16:03
Я все таки нагуглил о чем говорил Страуструп
Заметьте, что если вы не определите оператор копирующего присваивания, он будет сгенерирован компилятором. Отсюда следует, что операторы присваивания не наследуются. Конструкторы никогда не наследуются.
Теперь сообща вдумаемся в прочитанное... Да, конструкторы не наследуются!
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
14.01.2016, 16:23
Цитата Сообщение от Kastaneda Посмотреть сообщение
Заметьте, что если вы не определите оператор копирующего присваивания, он будет сгенерирован компилятором. Отсюда следует, что операторы присваивания не наследуются.
Все равно не понял. Ну будет сгенерирован и что? Доступ к оператору копирующего присваивания базового класса все равно останется, будет просто скрыт.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 16:47
Цитата Сообщение от Mr.X Посмотреть сообщение
Учитесь, как надо целые неинициализированные объекты объявлять!
Вы же сказали, что объект -- это выделенная область памяти, связанная с именем.
Я задал имя, связал с ним память.
Почему в вашем случае a -- объект, а моё i -- не объект?

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

Добавлено через 7 минут
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Ну будет сгенерирован и что?
Страуструп имеет в виду, что если бы конструктор был унаследован, то не требовалось бы его генерировать. Все сообщения экземпляру класса наследника о конструировании сразу передавались бы экземпляру базового класса.
Однако это принципиально невозможно, если только наследник вообще ничего не добавляет к базовому классу, так как базовый класс не может быть компетентен даже в том, сколько выделить памяти под дочерний объект. Не говоря уже о том, что базовых классов может быть много...
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2016, 18:28
Цитата Сообщение от mporro Посмотреть сообщение
Опять у фас какие-то фантазии начинаются, на почве С++
очень глупо называть фантазиями факты.
наследник наследует все члены базового класса независимо от того,
будет ли он иметь доступ к этим членам, или нет.

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

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

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

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

Цитата Сообщение от hoggy Посмотреть сообщение
объект - кусок памяти
То есть, формальное определение объекта такое: объект -- это произвольный набор последовательных адресов. Так? Или Вы как-то ещё сформулируете? Или цитату из Страуструпа приведёте?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2016, 18:48
Цитата Сообщение от Kastaneda Посмотреть сообщение
или как там у классиков
если вы про ООП - сущность,
наделенная свойствами и умениями

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

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

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

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

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

Цитата Сообщение от kzru_hunter Посмотреть сообщение
Что вообще понимается под выражением: конструкторы, деструкторы и т.д. не наследуются?
бред неосиляторов, полагаю.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
14.01.2016, 18:53
Цитата Сообщение от 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 ]
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2016, 18:58
Цитата Сообщение от kzru_hunter Посмотреть сообщение
но при этом он не наследуется, а переопределяемые функции наследуются
то бишь функционально он рабочий, доступный
но его как бе нет, да?

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

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

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

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

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

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

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

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

Добавлено через 15 минут
Цитата Сообщение от hoggy Посмотреть сообщение
RAII жеж, конструктор и есть инициализатор.
Ну дак некоторые думают, что конструктор создает объект, на самом деле сначала объект создается, а потом для него вызывается конструктор.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
14.01.2016, 19:30
Цитата Сообщение от 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.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2016, 19:46
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну дак некоторые думают, что конструктор создает объект, на самом деле сначала объект создается, а потом для него вызывается конструктор.
технически, конструктор - просто функция,
задача которой - наполнить содержимое памяти
чем то осмысленным.

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

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

поэтому, думаю, для упрощения восприятия,
вполне допустимо полагать,
что конструкторы порождают инициализированные объекты.
1
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 20:43
Цитата Сообщение от 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 Посмотреть сообщение
Цитата из стандарта подойдет?
Нет, из стандарта не подойдёт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.01.2016, 20:43

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

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

Конструкторы и деструкторы
Здравствуйте!Помогите пожалуйста с решением данной задачи, Буду премного благодарен за оказанную помощь :), а то я совсем:-| ...

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

Конструкторы и деструкторы
#include &lt;iostream&gt; #include &lt;Windows.h&gt; class Try { public: void* px; Try() { printf(&quot;Try\n&quot;); px=malloc(12); }; ...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru