|
29 / 23 / 2
Регистрация: 14.04.2009
Сообщений: 448
|
|
Наследуются ли конструкторы и деструкторы?02.06.2009, 14:54. Показов 30594. Ответов 124
Метки нет (Все метки)
0
|
|
| 02.06.2009, 14:54 | |
|
Ответы с готовыми решениями:
124
Наследуются ли конструкторы?
Конструкторы и деструкторы |
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
| 14.01.2016, 09:14 | |
|
kzru_hunter
В С++ наследование делает одновременно два дела: подтип наследует типовую метку супертипа и устанавливает между выведенным классом и базовым классом отношение композиции. Словно бы в В Вы определили поле типа A и разместили там какой-то объект. Это приводит к ужасающей путанице между наследованием и композицией. В частности, C++ позволяет "унаследовать" класс закрытым образом! Это приводит к тому, что два класса входят в отношение композиции, но не в ходят в отношение наследования вообще, а называется эта операция "закрытым наследованием". Также и с конструкторами: они не наследуются, наследовать их было бы крайне глупо, но они агрегируются. Добавлено через 14 минут kzru_hunter Есть ещё такой терминологический изыск: наследование интерфейса и наследование реализации. В этом смысле можно говорить, что интерфейс базовых конструкторов не наследуется, а реализация -- да. Можно развести дискуссию и на такую тему, что обсуждение наследования конструктора бессмысленно, как деление ноль, так как нельзя сказать, что объект обрабатывает сообщение о своём конструировании, ведь он вообще не создан!
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||||
| 14.01.2016, 09:53 | ||||||||||||||||||
|
товарищ несет пургу. Добавлено через 24 минуты класс А унаследовал от класса Б все получаем некий Д, который представляет собой плоскую модель [A:Б] то бишь все от А, и все от Б. доказательство непротиворечивости: люди грамотные, и балбесы сходяццо в одном: наследуются фукнкции-члены, и члены-данные классов. в частности мы можем позвать функцию член Б, через имя класса А:
если балбес скажет: нет, тогда он и начнет противоречить самому себе. функция-член наследуется. она просто не доступна в контексте класса наследника. технически, наследование - это тупо объединение двух (или более) классов в один. результатом синтеза А и Б является некий Д, который включает в себя все функции-члены и данные от обоих классов. при этом все члены обоих классов сосуществуют одновременно.
плоская модель, которая обладает всем функционалом обоих классов но при этом не является ни derrived, ни base все что нужно понять балбесам, коих в этой теме как минимум несколько: вопрос не в том, наследуется ли (да, наследуется). вопрос: а доступен ли? доступность тех или иных членов классов определяется правилами языка. но не техническими ограничениями. с технической точки зрения любой функционал базового класса, будь то функция-член, или конструктор (который, с технической точки зрения так же является функцией) реально существует.
0
|
||||||||||||||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 14.01.2016, 10:26 | ||
|
Наследование функции, это когда несколько классов разного типа имеют одну и ту же функцию. Но конструкторы классов разных типов по определению имеют разные имена, как же два разных типа могут иметь один и тот же конструктор? Так что холивар заложен самим автором языка в его противоречивой терминологии.
0
|
||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
||||||
| 14.01.2016, 10:30 | ||||||
|
hoggy
Опять у фас какие-то фантазии начинаются, на почве С++ Согласно вашим фантазиям ниже идёт наследование...
0
|
||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 14.01.2016, 10:33 | ||
|
Кстати, здесь у Страуструпа тоже терминологический ляп, так как конструктором он назвал то, что фактически является инициализатором.
0
|
||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
||
| 14.01.2016, 10:47 | ||
|
Mr.X
А вот С++ -- крайне неудачный. Язык, в сущности, низкого уровня. Здесь уже о терминах говорить сложнее, потому что люди упорно цепляются за конкретные реализации терминологических абстракций. Отбросить полностью реализации тоже не получается -- это важная часть С++. Вот и холивары. А Страуструп, собственно, и ни при чём. Он ясно везде даёт понять: есть абстракция -- это вот так, наша реализация -- вот так.
0
|
||
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|
| 14.01.2016, 10:51 | |
|
Поведение конструкторов и деструкторов при наследовании в отличие от методов больше напоминают инкапсуляцию (объекта базового класса в производный, именно объекта, а не указателя), что и не мудрено, ведь базовый класс целиком включается в производный и предоставляет ему свой интерфейс (опустим подробности).
Допустим у нас есть дерево (вырожденное в список) классов "1...N", теперь мы хотим создать объект класса "N" (вызываем его конструктор). Начинает разворачиваться рекурсия: конструктор "N" вызывает (прежде чем сам выполнится) конструктор N-1 (если явно не указывать, какой, то "по умолчанию"), этот в свою очередь - конструктор N-2 и т.д. При инкапсуляции, конструктор инициализирует свои данные, вызывая "конструкторы по умолчанию" или иные, при явном указании. С деструктором похожая ситуация. При уничтожении объекта класса "N", сначала выполняется тело его деструктора, затем деструктор "N-1" и т.д. В случае с полиморфизмом и виртуальными деструкторами компилятор не знает, объект какого класса надо удалять, поэтому "программа" смотрит в таблицу виртуальных методов, находит там деструктор некого класса "N-M" (M < N) и вызывает его, а тот все остальные до "самого базового" класса.
0
|
|
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
||
| 14.01.2016, 11:24 | ||
|
Ведь объекту до инициализации нельзя отправить никакого другого сообщения, кроме инициализации... Я бы эти стадии расположил в таком порядке, чтобы конструктор шёл более низким порядком, чем инициализация. Инициализация (не может сделать даже сам объект) --> копирование (инициализация нового объекта данными уже существующего, только на уровне самого объекта можно сделать) --> конструирование (т.е. преобразование кортежа входных аргументов в инициализатор объекта -- это может кто угодно). Добавлено через 28 минут Mr.X На мой взгляд, человек грамотно пишет про то, что конструкторы должны быть тонкими. Т.е. то, что мы в своих классах называем конструкторами, то и есть не более, чем инициализаторы. А настоящие конструкторы -- это wrappers & decorators, которые выражают естественные преобразования, втягивающие входящие параметры в категорию, описываемую нашим поведенческим типом.
0
|
||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||
| 14.01.2016, 12:10 | ||||
|
Добавлено через 14 минут Добавлено через 13 минут
0
|
||||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|||
| 14.01.2016, 12:20 | |||
|
0
|
|||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 14.01.2016, 12:20 | ||
|
Создание объекта - это установление связи между именем в программе и отрезком памяти в компьютере.
0
|
||
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
|
| 14.01.2016, 12:22 | |
|
3 страницы споров длинной в 6 лет... Только вот я не понимаю о чем тут спорить. Конструктор предназначен для конструирования обьектов одного конкрентного класса и только его. Наследники - это уже другие классы с другими обьектами и у них есть свой конструктор, который вызывает конструктор по умолчанию базового класса, если явно не указаны аргументы типа Derived(int i):Base(i){}
Спорить то не о чём А да. Обьект - это не область памяти. такое определение слишком низкоуровневое, его можно применить разве что к массиву или структуре в стиле С. Обьект размещается на области в памяти, при своем создании. Но ведет себя совсем не как область в памяти.
0
|
|
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
| 14.01.2016, 12:26 | |
|
Mr.X
Опять же... Если вернуться к абстракции Карделли, то объект -- это что-то, замыкающее обработку сообщений. Попытка получить какое-то значение для замыкания вызова из неинициализированной памяти может привести к чему угодно. С точки зрения низкоуровневой реализации объект выражается областью памяти, но абстракция объекта -- нечто большее, чем память.
0
|
|
|
|
|||
| 14.01.2016, 12:32 | |||
, у всех разные ракурсы. Я в своей жизни больше с низким уровнем работал, поэтому смотрю на все под этим углом. Если смотреть совсем абстрактно, то объект - это сущность, обрабатывающая сообщения (или как там у классиков).
0
|
|||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||
| 14.01.2016, 12:38 | ||
|
Прежде чем спорить о том, наследуются ли конструкторы/деструкторы, надо бы поспорить по поводу того, когда конструктор/деструктор можно назвать унаследованным
![]() В контексте C++:
0
|
||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|||
| 14.01.2016, 12:38 | |||
|
0
|
|||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
||||||||
| 14.01.2016, 13:18 | ||||||||
|
ct0r
Стандарт относится не только к тем, кто языком пользуется, но и к тем, кто создаёт компиляторы, причём к последним в большей степени. Inheretence с точки зрения стандарта -- это может быть всё, что угодно комитету. Если мы разбираем вопрос: агрегируются ли конструкторы? Мы открываем стандарт и видим, что агрегируется всё и называется (в стандрате!) наследованием. Но это слово не имеет никакого отношения к ООП. Это как в юр. договоре: "ООО<Си и Плюс-Плюс>, именуемое далее поставщик..." Но это вовсе не означает, что в русском языке "поставщик" -- это ООО<Си и Плюс-Плюс>. С точки зрения абстракции наследования, конструкторы С++ не наследуются, они только агрегируются. Если я напишу
Добавлено через 10 минут Вот в С++ наследование реализовано прямой агрегацией. И когда начинают выдавать агрегацию за наследование, то мы получаем персонал, который наследует машину от колеса...
0
|
||||||||
|
|
||||||
| 14.01.2016, 14:40 | ||||||
|
Я запутался, не знаю, кому верить. Если рассуждать, что конструкторы не наследуются, то получается, что и методы, которые были переопределены в производном классе, не наследуются (но об этом везде молчок):
0
|
||||||
| 14.01.2016, 14:40 | |
|
Конструкторы и деструкторы Конструкторы и деструкторы
Конструкторы и деструкторы Конструкторы и деструкторы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|