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

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

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

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

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

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

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

124
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 20:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
поэтому, думаю, для упрощения восприятия,
вполне допустимо полагать,
что конструкторы порождают инициализированные объекты.
Ну дак товарищ выше как раз и недоумевал кем (или для кого) вызывается конструктор, если объекта по предположению еще нет.

Добавлено через 4 минуты
Цитата Сообщение от mporro Посмотреть сообщение
память становится объектом только после инициализации, так как до инициализации эта часть памяти не может обрабатывать сообщения, адресованные объекту, что, собственно, этот объект и определяет.
Ну, мы уже по кругу пошли.
Цитата Сообщение от Mr.X Посмотреть сообщение
Неинициализированный объект можно только инициализировать, а инициализированный можно использовать.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
14.01.2016, 21:03
Цитата Сообщение от mporro Посмотреть сообщение
Нет, из стандарта не подойдёт.
Ок.
"The C++ Programming Language Fourth Edition" - Bjarne Stroustrup

6.4 Objects and Values
We can allocate and use objects that do not have names (e.g., created using new ), and it is possible to assign to strange-looking expressions (e.g., ∗p[a+10]=7 ). Consequently, we need a name for ‘‘something in memory.’’ This is the simplest and most fundamental notion of an object. That is, an object is a contiguous region of storage;
Подойдет?
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 21:15
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, мы уже по кругу пошли.
Да мы и не шли никуда. Где были, там и стоим. Объекта до инициализации нет.

Croessmah
Оттуда же:
• An object is some memory that holds a value of some type.
Целое число, конечно рациональное, но рациональное не есть целое. Объект, конечно, занимает память. Но память -- это ещё не объект.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
14.01.2016, 21:22
mporro, ну так объект - некоторая память.
А что там уже - это значение.
Выделена память под объект - это уже объект. Просто его значение еще identermenate.
C++
1
2
3
4
5
6
7
struct MyType
{
   int x ;
   int y ;
} ;
 
MyType obj ; //Память выделена, объект создан, значение неопределенное.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 21:26
P.S.
В принципе длить эту дискуссию бесперспективно.
Перебить аргумент, что часть памяти, выделенная под целое число, не является целым числом до инициализации, по-моему, нечем. А раз это так, то и более общее утверждение, что "часть памяти -- это объект" тоже не верно.
А раз до инициализации объекта нет, то и сообщение о конструировании он обработать не может, как и унаследовать его откуда угодно.

На сём завершаю.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
14.01.2016, 21:27
Цитата Сообщение от mporro Посмотреть сообщение
"часть памяти -- это объект"
Это определение объекта, нравится Вам это или нет.
Цитата Сообщение от mporro Посмотреть сообщение
В принципе длить эту дискуссию бесперспективно.
Давно уже.

Добавлено через 30 секунд
Цитата Сообщение от mporro Посмотреть сообщение
А раз до инициализации объекта нет
см. код выше. Инициализация не производится, объект есть
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2016, 21:37
Цитата Сообщение от mporro Посмотреть сообщение
Страуструп не мог написать такой ерунды, как "объект -- кусок памяти", потому я попросил цитату:
тем не менее - написал.
и это - не ерунда.
его цитаты столь же лаконичны, сколь и точны.

Цитата Сообщение от mporro Посмотреть сообщение
Если что-то не инициализированно, там никакого разумного значения нет. Значит и объекта нет.
нет, не значит.
не инициализированная переменная типа int содержит мусор.
но это не значит, что у переменной нет объекта.

это значит лишь,
что здесь и сейчас значение переменной не имеет значения.

Цитата Сообщение от mporro Посмотреть сообщение
Нет, из стандарта не подойдёт.


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

или, если по простому - денотирование объекта,
и наполнение его чем то осмысленным -
это одна цельная и не делимая процедура.

Цитата Сообщение от mporro Посмотреть сообщение
Объект, конечно, занимает память. Но память -- это ещё не объект.
бред.

некоторая часть денег конечно занимают деньги.
но деньги - это ещё не некоторая часть денег.
Добавлено через 3 минуты
Цитата Сообщение от mporro Посмотреть сообщение
Перебить аргумент, что часть памяти, выделенная под целое число, не является целым числом до инициализации, по-моему, нечем.
перебить аргумент, что часть памяти под целое число - это лишь часть памяти,
выделенная под целое число,
и она так и будет оставаться всего лишь памятью,
независимо от того,
проиницйиализировали её содержимое или нет,
по-моему, нечем.

считать, что часть памяти выделнная под целое число
внезапно превратилась в само это целое число после инициализации,
значит не дружить ни с логикой,
ни со здравым смыслом.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 22:19
Цитата Сообщение от mporro Посмотреть сообщение
Объекта до инициализации нет.
А что же тогда инициализируется, если его нет?
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 23:43
Цитата Сообщение от Mr.X Посмотреть сообщение
А что же тогда инициализируется, если его нет?
Ничего не инициализируется. Это проблема неформального языка.
Конструктор инициализирует объект. "Неинициализированный объект" -- это терминологический изыск, обозначающий особую ситуацию C++, когда что-то есть, но это не является корректным объектом того типа, который приписан связанному имени.

Цитата Сообщение от Croessmah Посмотреть сообщение
объект есть
Это не объект, так как я не могу корректно послать ему сообщение, согласно стандарту же. Абсурдно утверждать, что у Вас есть роза, но она выглядит как раффлезия и пахнет раффлезией, потому что ещё не инициализирована.

Цитата Сообщение от Croessmah Посмотреть сообщение
Это определение объекта, нравится Вам это или нет.
В рамках стандарта С++, да. Но для меня это утверждение из стандарта является абсурдным.
Согласно Бертрану Мейеру, поддерживающему идиологию классов, кстати, объект -- это некоторое верное значение абстрактного типа данных, описываемого классом. И это определение имеет для меня как специалиста в области проектирования объектных систем, гораздо больше пользы, чем слово из стандарта.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
14.01.2016, 23:49
mporro, мы в разделе С++, а не Теория и практика программирования, вот в чем фишка
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
14.01.2016, 23:51
Цитата Сообщение от mporro Посмотреть сообщение
В рамках стандарта С++, да.
Цитата Сообщение от mporro Посмотреть сообщение
меня как специалиста в области проектирования объектных систем, гораздо больше пользы, чем слово из стандарта.
Мы находимся в разделе C++ и обсуждаем C++.
Документ, который определяет язык и всё с ним связанное - стандарт языка.
Для прораба на стройке, объект - это вообще стройка. И ему не важно что там пишет Мейер.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 23:56
Цитата Сообщение от mporro Посмотреть сообщение
В рамках стандарта С++, да. Но для меня это утверждение из стандарта является абсурдным.
Цитата Сообщение от mporro Посмотреть сообщение
для меня как специалиста
mporro, неверие в стандарт С++ сильно подрывает вашу репутацию как "специалиста". И одно тут сильно противоречит другому, мне кажется!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2016, 23:59
Цитата Сообщение от mporro Посмотреть сообщение
В рамках стандарта С++, да. Но для меня это утверждение из стандарта является абсурдным.
Второе предложение противоречит первому.
У Вас всё в какую-то кашу перемешалось.

Цитата Сообщение от mporro Посмотреть сообщение
Согласно Бертрану Мейеру, поддерживающему идиологию классов, кстати, объект -- это некоторое верное значение абстрактного типа данных, описываемого классом.
тезис никак не противоречит специфике с++
Цитата Сообщение от mporro Посмотреть сообщение
И это определение имеет для меня как специалиста в области проектирования объектных систем, гораздо больше пользы, чем слово из стандарта.
Боюсь, что как специалист по части с++,
вы вызываете серьёзные опасения по части вашей компетенции.
На протяжении всей этой темы вы генерировали ляп за ляпом,
обнажая своё невежество по части этого языка.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
15.01.2016, 00:08
Цитата Сообщение от Croessmah Посмотреть сообщение
мы находимся в разделе C++ и обсуждаем C++.
Документ, который определяет язык и всё с ним связанное - стандарт языка.
А я не спорю!
Но стандарт интересен для определения операционной семантики языка, а не для попыток определения терминов.
Бессмысленно потрясать договором со словами "ООО<Си и Плюс-Плюс>, именуемый далее поставщик" для определения слова поставщик, да её и утверждений, что любое ООО -- это поставщик.

У наследования объектов есть ясное определение. Если любое сообщение, корректное для типа A, корректно обрабатывается и типом B, то B наследует A. Абстрактный тип выражается классом. Объект -- верное значение абстрактного типа. Наследуется ли конструктор? Нужно узнать, если обрабатывает ли B корректно сообщение для A. Вот здесь нужен стандарт! Это будет вопрос именно C++! Обрабатывает или нет. Если нет -- не наследуется. Если да -- наследуется. Но что там внутри себя стандарт называет наследованием -- деталь, в которую мы вообще не должны лезть.

Если программист унаследует машину от руля, мотивируя тем, что так оно вытекает из стандарта C++, он всё равно получит тикет назад, и денег за работу не увидит, потому что машина рулём не является.


Цитата Сообщение от ct0r Посмотреть сообщение
мы в разделе С++, а не Теория и практика программирования, вот в чем фишка
Никто не рассуждает о JavaScript...
Вопрос прост: если есть класс A и от него унаследован класс B, то верно ли, что для каждого конструктора A, В корректно обрабатывает эквивалентные сообщения?
Выясняется, насколько я понимаю, что нет. Мы должны явно делегировать вызов внутреннему объекту A либо написав эквивалентный конструктор, либо явно обратившись к агрегату A. Значит эти конструкторы не унаследованы.

В каком-нибудь PHP это будет не так. В последних версиях там конструкторы именно наследуются. И в разделе PHP, можно было бы сказать: да, конструкторы наследуются.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
15.01.2016, 00:12
Цитата Сообщение от mporro Посмотреть сообщение
Если любое сообщение, корректное для типа A, корректно обрабатывается и типом B, то B наследует A.
У конструктора нет имени. Послать отсутствующее сообщение? Круть.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.01.2016, 00:15
Цитата Сообщение от mporro Посмотреть сообщение
Вопрос прост: если есть класс A и от него унаследован класс B, то верно ли, что для каждого конструктора A, В корректно обрабатывает эквивалентные сообщения?
тоже самое, только по-русски.

при этом пожалуйста, не используйте формулировок
вроде "конструктор А не против пацифизма".
потому что конструктору глубоко фиолетовы
все эти ваши гуманитарные фантазии.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
15.01.2016, 00:18
Цитата Сообщение от Mr.X Посмотреть сообщение
неверие в стандарт С++ сильно подрывает вашу репутацию как "специалиста"
Стандарт C++ никак не может определять какие-либо высокоуровневые понятия. Такие как наследование или объект. Если бы мы занимались вопросами реализации С++ и зашла бы дискуссия о том, нужно ли агрегировать базовый объект или можно просто делегировать вызов разделяемому объекту, если объект базового класса иммутабельный, то стандарт ответил бы нам, что мы должны, как минимум, агрегировать все свойства.

Можно свободно подвергать сомнению мою компетентность на форуме.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.01.2016, 00:18
Цитата Сообщение от mporro Посмотреть сообщение
Если любое сообщение, корректное для типа A, корректно обрабатывается и типом B, то B наследует A.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <event>
struct A: event::listen<int> {
    void readMessage(int) { std::cout<<"trololo\n"; }
}
 
struct B: event::listen<int> {
    void readMessage(int) { std::cout<<"ololo\n"; }
}
 
int main(){
    event::send(10);
}
о боже! А и Б у нас оказывается родственники.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
15.01.2016, 00:33
Цитата Сообщение от Croessmah Посмотреть сообщение
Послать отсутствующее сообщение? Круть.
Оно не отсутствующее. Вы же вызываете конструктор, значит посылаете сообщение.

Цитата Сообщение от hoggy Посмотреть сообщение
тоже самое, только по-русски.
Что не понятно?

Есть тип A, определяемый классом A, у него есть набор сообщений которые он может верно обработать, то есть при выполнении предусловий гарантировать выполнение постусловий и завершить обработку. Есть тип B, определяемый классом B, у него есть набор своих сообщений, которые он может корректно обработать. Если все корректные для A сообщения корректны для B, то B наследует A.


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

Добавлено через 4 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
А и Б у нас оказывается родственники.
Да, вполне может быть. В некоторых языках этого достаточно, чтобы признать объекты, обрабатывающие одинаковые сообщения, объектами одного типа. И ничего дополнительно не требуется сообщать.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.01.2016, 00:38
Добавлено через 3 минуты
Цитата Сообщение от mporro Посмотреть сообщение
Есть тип A, определяемый классом A, у него есть набор сообщений которые он может верно обработать, то есть при выполнении предусловий гарантировать выполнение постусловий и завершить обработку. Есть тип B, определяемый классом B, у него есть набор своих сообщений, которые он может корректно обработать. Если все корректные для A сообщения корректны для B, то B наследует A.
все это очень здорово.
только это - о типах.
причем тут объекты?

Цитата Сообщение от mporro Посмотреть сообщение
Если инициализация не прошла, то память вряд ли содержит верное или вообще хоть сколько-нибудь предсказуемое значение. Тогда эта память никак не может быть объектом, который должен быть верным значением.
тогда объект находится в неконсистентном состоянии.
однако не означает, что объекта не существует.
Цитата Сообщение от mporro Посмотреть сообщение
Да, вполне может быть. В некоторых языках
вы не забыли, где вы находитесь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2016, 00:38

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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