![]() |
|
Модераторы: bsa |
![]()
|
|
| EvilsInterrupt |
|
||||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
В виду того что тема может быть полезна любому новичку, потому все вопросы вокруг исключения и рядом с ними пусть будут в одной теме
Спрашивал Lazin`a и он говорит, бага :
связана с тем что потомок не наследует конструкторы базовогого! Мне интересно почему это так надо ? Это сообщение отредактировал(а) bsa - 22.7.2009, 20:14 |
||||
|
|||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
Ну да, и тогда конструктор потомка должен вызвать конструктор базового (это если в базовом классе все конструкторы с аргументами и агрументам не присваивается значение по умолчанию). Что так надо? -------------------- |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
>>Что так надо?
В случае методов, могу их не реализовывать! Просто реализация унаследовалась и могу спокойно их вызвать без каких-либо проблем! С конструкторами же, даже если они реализованы в базовом уже не так, я должен явно в секции инициализации конструктора потомка указать вызового конструктора. пример: Child::Child(char * t) : Base(t) {} почему мне это надо делать ? Не пойму логику стандарта, если уж чтото сделано, то почему методы можно наследовать, а конструкторы заново реализовывать надо ? |
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
Может хотябы по тому, что лучше всех знает как инициализировать/"уничтожать" объекты класса его разработчик... -------------------- |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
EvilsInterrupt, ну, например, потому что у конструкторов базового класса название отлично от названия класса потомка.
|
|||
|
||||
| Леопольд |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Какой из конструкторов базового класса должен быть вызван? Уверен, если подумать, то можно найти ещё причины. Если же есть единственный конструктор по умолчанию, то будет вызван именно он.
Конструктор - инициализация объекта во время создания. Как реализация базового конструктора может инициализировать объект наследник? Базовый класс ничего не знает о наследнике. Я лично не могу представить каким образом можно унаследовать реализацию базового конструктора для общего случая. Это сообщение отредактировал(а) Леопольд - 22.7.2009, 20:57 -------------------- вопросов больше чем ответов |
||||||
|
|||||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
логика простая: откуда компилятор узнает, какой из конструкторов вызвать, если их несколько? на самом деле конструктор базового класса вызывается всегда, даже если ты его не вызываешь явно, но это будет конструктор по умолчанию |
|||
|
||||
| hsilgos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 26.4.2009 Репутация: 1 Всего: 2 |
В будущем стандарте планируется ввести что-то типа наследования. Чтобы не создавать свой пустой конструктор и дергать базовый, можно будет в теле класса написать что-то типа:
Это сообщение отредактировал(а) hsilgos - 22.7.2009, 23:51 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |