|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.11.2010, 20:09 | #1 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Как вызываются конструкторы объектов при наследовании?
Вот небольшой пример:
Код:
В делфи всё понятно - там конструктор объекта, от которого идёт наследование, вызывается вручную (inherited) |
15.11.2010, 20:32 | #2 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Примерно так:
Код:
Если я не ошибаюсь
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Последний раз редактировалось Syuf; 16.11.2010 в 19:53. |
15.11.2010, 20:40 | #3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,069
|
Я бы сделал примерно так:
Код:
|
16.11.2010, 18:57 | #4 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Код:
Что значит "Без явного вызова конструктора базового класса."? И когда вызывается конструктор объекта, от которого мы унаследовали другой объект? До второго конструктора или в конце конструктора? |
16.11.2010, 20:59 | #5 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,069
|
У меня в реализации было 2 конструктора. public без параметров и protected - с параметром. Можно реализовать и иначе, тут уж как больше нравится. Я лишь возможный вариант предложил.
Конструктор базового класса вызывается в любом случае. Если параметры никакие не нужно этому конструктору передавать, то его вызов никак и не указывается в коде (нет явного его вызова), если же нужно передать параметр (или просто хочется упомянуть о конструкторе базового класса), то уже идёт запись вида B(): A(200), т.е. явно вызываем контруктор базового класса. Цитата:
Если взять для наглядности мой пример, то сначала вызовется конструктор класса А с параметром 200, а потом уже конструктор класса В, в котором у нас собственно ничего и нет |
|
16.11.2010, 23:11 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а ведь я тока не давно тему создавал по этому поводу
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
17.11.2010, 01:33 | #7 | |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Цитата:
И вообще, как-то заморочено. TwiX, а оно точно нужно так делать? |
|
17.11.2010, 03:55 | #8 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
Такое вообще делать не нужно) Просто вдруг захотелось разобраться)
Пепел, там не то) Про то, как вызвать конструктор других переменных перед конструктором себя я знаю =) |
17.11.2010, 09:19 | #9 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,069
|
Никуда. Будет утечка памяти. Поэтому обычно члены классов делают таки private и не размазывают прямой доступ к ним по всей иерархии. Работать со всеми членами классов нужно исключительно через get/set методы, а иначе вермишель вместо кода будет и память утекать аки через дуршлаг будет
|
17.11.2010, 12:47 | #10 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
pu4koff, а лучше вообще указатели в явном виде не юзать. Юзать их обёртки. тада вапще проблем с утечкой не будет в принципе.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
обработка объектов при помощи DLL | Kompuklumba | Общие вопросы Delphi | 4 | 06.11.2010 15:20 |
Проблема при использовании прозрачности объектов в OpenGL | Gwaeron | Помощь студентам | 0 | 22.04.2010 11:18 |
Перегрузка == при наследовании | paramon | Общие вопросы C/C++ | 5 | 17.06.2008 00:17 |