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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.93
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
02.06.2009, 14:54     Наследуются ли конструкторы и деструкторы? #1
При наследовании происходит ли наследование конструкторов и деструкторов базового класса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
3011 / 1667 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 20:54     Наследуются ли конструкторы и деструкторы? #81
Цитата Сообщение от hoggy Посмотреть сообщение
поэтому, думаю, для упрощения восприятия,
вполне допустимо полагать,
что конструкторы порождают инициализированные объекты.
Ну дак товарищ выше как раз и недоумевал кем (или для кого) вызывается конструктор, если объекта по предположению еще нет.

Добавлено через 4 минуты
Цитата Сообщение от mporro Посмотреть сообщение
память становится объектом только после инициализации, так как до инициализации эта часть памяти не может обрабатывать сообщения, адресованные объекту, что, собственно, этот объект и определяет.
Ну, мы уже по кругу пошли.
Цитата Сообщение от Mr.X Посмотреть сообщение
Неинициализированный объект можно только инициализировать, а инициализированный можно использовать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12079 / 6940 / 782
Регистрация: 27.09.2012
Сообщений: 17,216
Записей в блоге: 2
Завершенные тесты: 1
14.01.2016, 21:03     Наследуются ли конструкторы и деструкторы? #82
Цитата Сообщение от 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;
Подойдет?
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 21:15     Наследуются ли конструкторы и деструкторы? #83
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, мы уже по кругу пошли.
Да мы и не шли никуда. Где были, там и стоим. Объекта до инициализации нет.

Croessmah
Оттуда же:
• An object is some memory that holds a value of some type.
Целое число, конечно рациональное, но рациональное не есть целое. Объект, конечно, занимает память. Но память -- это ещё не объект.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12079 / 6940 / 782
Регистрация: 27.09.2012
Сообщений: 17,216
Записей в блоге: 2
Завершенные тесты: 1
14.01.2016, 21:22     Наследуются ли конструкторы и деструкторы? #84
mporro, ну так объект - некоторая память.
А что там уже - это значение.
Выделена память под объект - это уже объект. Просто его значение еще identermenate.
C++
1
2
3
4
5
6
7
struct MyType
{
   int x ;
   int y ;
} ;
 
MyType obj ; //Память выделена, объект создан, значение неопределенное.
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 21:26     Наследуются ли конструкторы и деструкторы? #85
P.S.
В принципе длить эту дискуссию бесперспективно.
Перебить аргумент, что часть памяти, выделенная под целое число, не является целым числом до инициализации, по-моему, нечем. А раз это так, то и более общее утверждение, что "часть памяти -- это объект" тоже не верно.
А раз до инициализации объекта нет, то и сообщение о конструировании он обработать не может, как и унаследовать его откуда угодно.

На сём завершаю.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12079 / 6940 / 782
Регистрация: 27.09.2012
Сообщений: 17,216
Записей в блоге: 2
Завершенные тесты: 1
14.01.2016, 21:27     Наследуются ли конструкторы и деструкторы? #86
Цитата Сообщение от mporro Посмотреть сообщение
"часть памяти -- это объект"
Это определение объекта, нравится Вам это или нет.
Цитата Сообщение от mporro Посмотреть сообщение
В принципе длить эту дискуссию бесперспективно.
Давно уже.

Добавлено через 30 секунд
Цитата Сообщение от mporro Посмотреть сообщение
А раз до инициализации объекта нет
см. код выше. Инициализация не производится, объект есть
hoggy
5418 / 2217 / 410
Регистрация: 15.11.2014
Сообщений: 4,984
Завершенные тесты: 1
14.01.2016, 21:37     Наследуются ли конструкторы и деструкторы? #87
Цитата Сообщение от mporro Посмотреть сообщение
Страуструп не мог написать такой ерунды, как "объект -- кусок памяти", потому я попросил цитату:
тем не менее - написал.
и это - не ерунда.
его цитаты столь же лаконичны, сколь и точны.

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

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

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


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

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

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

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

считать, что часть памяти выделнная под целое число
внезапно превратилась в само это целое число после инициализации,
значит не дружить ни с логикой,
ни со здравым смыслом.
Mr.X
Эксперт С++
 Аватар для Mr.X
3011 / 1667 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 22:19     Наследуются ли конструкторы и деструкторы? #88
Цитата Сообщение от mporro Посмотреть сообщение
Объекта до инициализации нет.
А что же тогда инициализируется, если его нет?
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 23:43     Наследуются ли конструкторы и деструкторы? #89
Цитата Сообщение от Mr.X Посмотреть сообщение
А что же тогда инициализируется, если его нет?
Ничего не инициализируется. Это проблема неформального языка.
Конструктор инициализирует объект. "Неинициализированный объект" -- это терминологический изыск, обозначающий особую ситуацию C++, когда что-то есть, но это не является корректным объектом того типа, который приписан связанному имени.

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

Цитата Сообщение от Croessmah Посмотреть сообщение
Это определение объекта, нравится Вам это или нет.
В рамках стандарта С++, да. Но для меня это утверждение из стандарта является абсурдным.
Согласно Бертрану Мейеру, поддерживающему идиологию классов, кстати, объект -- это некоторое верное значение абстрактного типа данных, описываемого классом. И это определение имеет для меня как специалиста в области проектирования объектных систем, гораздо больше пользы, чем слово из стандарта.
ct0r
C++/Haskell
 Аватар для ct0r
1557 / 576 / 39
Регистрация: 19.08.2012
Сообщений: 1,191
Завершенные тесты: 1
14.01.2016, 23:49     Наследуются ли конструкторы и деструкторы? #90
mporro, мы в разделе С++, а не Теория и практика программирования, вот в чем фишка
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12079 / 6940 / 782
Регистрация: 27.09.2012
Сообщений: 17,216
Записей в блоге: 2
Завершенные тесты: 1
14.01.2016, 23:51     Наследуются ли конструкторы и деструкторы? #91
Цитата Сообщение от mporro Посмотреть сообщение
В рамках стандарта С++, да.
Цитата Сообщение от mporro Посмотреть сообщение
меня как специалиста в области проектирования объектных систем, гораздо больше пользы, чем слово из стандарта.
Мы находимся в разделе C++ и обсуждаем C++.
Документ, который определяет язык и всё с ним связанное - стандарт языка.
Для прораба на стройке, объект - это вообще стройка. И ему не важно что там пишет Мейер.
Mr.X
Эксперт С++
 Аватар для Mr.X
3011 / 1667 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 23:56     Наследуются ли конструкторы и деструкторы? #92
Цитата Сообщение от mporro Посмотреть сообщение
В рамках стандарта С++, да. Но для меня это утверждение из стандарта является абсурдным.
Цитата Сообщение от mporro Посмотреть сообщение
для меня как специалиста
mporro, неверие в стандарт С++ сильно подрывает вашу репутацию как "специалиста". И одно тут сильно противоречит другому, мне кажется!
hoggy
5418 / 2217 / 410
Регистрация: 15.11.2014
Сообщений: 4,984
Завершенные тесты: 1
14.01.2016, 23:59     Наследуются ли конструкторы и деструкторы? #93
Цитата Сообщение от mporro Посмотреть сообщение
В рамках стандарта С++, да. Но для меня это утверждение из стандарта является абсурдным.
Второе предложение противоречит первому.
У Вас всё в какую-то кашу перемешалось.

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

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

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


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

В каком-нибудь PHP это будет не так. В последних версиях там конструкторы именно наследуются. И в разделе PHP, можно было бы сказать: да, конструкторы наследуются.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12079 / 6940 / 782
Регистрация: 27.09.2012
Сообщений: 17,216
Записей в блоге: 2
Завершенные тесты: 1
15.01.2016, 00:12     Наследуются ли конструкторы и деструкторы? #95
Цитата Сообщение от mporro Посмотреть сообщение
Если любое сообщение, корректное для типа A, корректно обрабатывается и типом B, то B наследует A.
У конструктора нет имени. Послать отсутствующее сообщение? Круть.
hoggy
5418 / 2217 / 410
Регистрация: 15.11.2014
Сообщений: 4,984
Завершенные тесты: 1
15.01.2016, 00:15     Наследуются ли конструкторы и деструкторы? #96
Цитата Сообщение от mporro Посмотреть сообщение
Вопрос прост: если есть класс A и от него унаследован класс B, то верно ли, что для каждого конструктора A, В корректно обрабатывает эквивалентные сообщения?
тоже самое, только по-русски.

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

Можно свободно подвергать сомнению мою компетентность на форуме.
hoggy
5418 / 2217 / 410
Регистрация: 15.11.2014
Сообщений: 4,984
Завершенные тесты: 1
15.01.2016, 00:18     Наследуются ли конструкторы и деструкторы? #98
Цитата Сообщение от 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);
}
о боже! А и Б у нас оказывается родственники.
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
15.01.2016, 00:33     Наследуются ли конструкторы и деструкторы? #99
Цитата Сообщение от Croessmah Посмотреть сообщение
Послать отсутствующее сообщение? Круть.
Оно не отсутствующее. Вы же вызываете конструктор, значит посылаете сообщение.

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

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


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

Добавлено через 4 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
А и Б у нас оказывается родственники.
Да, вполне может быть. В некоторых языках этого достаточно, чтобы признать объекты, обрабатывающие одинаковые сообщения, объектами одного типа. И ничего дополнительно не требуется сообщать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2016, 00:38     Наследуются ли конструкторы и деструкторы?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
hoggy
5418 / 2217 / 410
Регистрация: 15.11.2014
Сообщений: 4,984
Завершенные тесты: 1
15.01.2016, 00:38     Наследуются ли конструкторы и деструкторы? #100
Добавлено через 3 минуты
Цитата Сообщение от mporro Посмотреть сообщение
Есть тип A, определяемый классом A, у него есть набор сообщений которые он может верно обработать, то есть при выполнении предусловий гарантировать выполнение постусловий и завершить обработку. Есть тип B, определяемый классом B, у него есть набор своих сообщений, которые он может корректно обработать. Если все корректные для A сообщения корректны для B, то B наследует A.
все это очень здорово.
только это - о типах.
причем тут объекты?

Цитата Сообщение от mporro Посмотреть сообщение
Если инициализация не прошла, то память вряд ли содержит верное или вообще хоть сколько-нибудь предсказуемое значение. Тогда эта память никак не может быть объектом, который должен быть верным значением.
тогда объект находится в неконсистентном состоянии.
однако не означает, что объекта не существует.
Цитата Сообщение от mporro Посмотреть сообщение
Да, вполне может быть. В некоторых языках
вы не забыли, где вы находитесь?
Yandex
Объявления
15.01.2016, 00:38     Наследуются ли конструкторы и деструкторы?
Ответ Создать тему
Опции темы

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