Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

При наследовании происходит ли наследование конструкторов и деструкторов базового класса?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2009, 14:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследуются ли конструкторы и деструкторы? (C++):

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

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

Конструкторы и деструкторы - C++
Помогите, пожалуйста, исправить программу и закончить ее как надо. Необходимо реализовать класс с двумя полями, имеющими имена first и...

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

Конструкторы и деструкторы - C++
Не понимаю, как закончить программу. Написала конструктор и деструктор, хотя он тут и не нужен по идее. Но по заданию сделала. А как...

Конструкторы и деструкторы - C++
Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны присутствовать: Для инициализации...

124
hoggy
6697 / 2879 / 494
Регистрация: 15.11.2014
Сообщений: 6,478
Завершенные тесты: 1
14.01.2016, 18:58 #76
Цитата Сообщение от kzru_hunter Посмотреть сообщение
но при этом он не наследуется, а переопределяемые функции наследуются
то бишь функционально он рабочий, доступный
но его как бе нет, да?

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

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

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

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

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

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

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

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

Добавлено через 15 минут
Цитата Сообщение от hoggy Посмотреть сообщение
RAII жеж, конструктор и есть инициализатор.
Ну дак некоторые думают, что конструктор создает объект, на самом деле сначала объект создается, а потом для него вызывается конструктор.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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.
0
hoggy
6697 / 2879 / 494
Регистрация: 15.11.2014
Сообщений: 6,478
Завершенные тесты: 1
14.01.2016, 19:46 #79
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну дак некоторые думают, что конструктор создает объект, на самом деле сначала объект создается, а потом для него вызывается конструктор.
технически, конструктор - просто функция,
задача которой - наполнить содержимое памяти
чем то осмысленным.

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

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

поэтому, думаю, для упрощения восприятия,
вполне допустимо полагать,
что конструкторы порождают инициализированные объекты.
1
mporro
256 / 101 / 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 Посмотреть сообщение
Цитата из стандарта подойдет?
Нет, из стандарта не подойдёт.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.01.2016, 20:54 #81
Цитата Сообщение от hoggy Посмотреть сообщение
поэтому, думаю, для упрощения восприятия,
вполне допустимо полагать,
что конструкторы порождают инициализированные объекты.
Ну дак товарищ выше как раз и недоумевал кем (или для кого) вызывается конструктор, если объекта по предположению еще нет.

Добавлено через 4 минуты
Цитата Сообщение от mporro Посмотреть сообщение
память становится объектом только после инициализации, так как до инициализации эта часть памяти не может обрабатывать сообщения, адресованные объекту, что, собственно, этот объект и определяет.
Ну, мы уже по кругу пошли.
Цитата Сообщение от Mr.X Посмотреть сообщение
Неинициализированный объект можно только инициализировать, а инициализированный можно использовать.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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;
Подойдет?
0
mporro
256 / 101 / 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.
Целое число, конечно рациональное, но рациональное не есть целое. Объект, конечно, занимает память. Но память -- это ещё не объект.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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 ; //Память выделена, объект создан, значение неопределенное.
0
mporro
256 / 101 / 14
Регистрация: 04.07.2014
Сообщений: 571
14.01.2016, 21:26 #85
P.S.
В принципе длить эту дискуссию бесперспективно.
Перебить аргумент, что часть памяти, выделенная под целое число, не является целым числом до инициализации, по-моему, нечем. А раз это так, то и более общее утверждение, что "часть памяти -- это объект" тоже не верно.
А раз до инициализации объекта нет, то и сообщение о конструировании он обработать не может, как и унаследовать его откуда угодно.

На сём завершаю.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
14.01.2016, 21:27 #86
Цитата Сообщение от mporro Посмотреть сообщение
"часть памяти -- это объект"
Это определение объекта, нравится Вам это или нет.
Цитата Сообщение от mporro Посмотреть сообщение
В принципе длить эту дискуссию бесперспективно.
Давно уже.

Добавлено через 30 секунд
Цитата Сообщение от mporro Посмотреть сообщение
А раз до инициализации объекта нет
см. код выше. Инициализация не производится, объект есть
0
hoggy
6697 / 2879 / 494
Регистрация: 15.11.2014
Сообщений: 6,478
Завершенные тесты: 1
14.01.2016, 21:37 #87
Цитата Сообщение от mporro Посмотреть сообщение
Страуструп не мог написать такой ерунды, как "объект -- кусок памяти", потому я попросил цитату:
тем не менее - написал.
и это - не ерунда.
его цитаты столь же лаконичны, сколь и точны.

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

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

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


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

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

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

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

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

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

Цитата Сообщение от Croessmah Посмотреть сообщение
Это определение объекта, нравится Вам это или нет.
В рамках стандарта С++, да. Но для меня это утверждение из стандарта является абсурдным.
Согласно Бертрану Мейеру, поддерживающему идиологию классов, кстати, объект -- это некоторое верное значение абстрактного типа данных, описываемого классом. И это определение имеет для меня как специалиста в области проектирования объектных систем, гораздо больше пользы, чем слово из стандарта.
0
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,294
Завершенные тесты: 1
14.01.2016, 23:49 #90
mporro, мы в разделе С++, а не Теория и практика программирования, вот в чем фишка
0
14.01.2016, 23:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2016, 23:49
Привет! Вот еще темы с ответами:

Конструкторы и деструкторы - C++
Код: #include <iostream> #include <stdlib.h> #include <conio.h> class complex { private: double im; double...

Конструкторы и деструкторы - C++
Помогите исправить программу. Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны...

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

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


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

Или воспользуйтесь поиском по форуму:
90
Ответ Создать тему
Опции темы

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