| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Наследование конструкторов |
| Автор: EvilsInterrupt 22.7.2009, 13:31 | ||||
В виду того что тема может быть полезна любому новичку, потому все вопросы вокруг исключения и рядом с ними пусть будут в одной теме
Спрашивал Lazin`a и он говорит, бага :
связана с тем что потомок не наследует конструкторы базовогого! Мне интересно почему это так надо ? |
| Автор: EvilsInterrupt 22.7.2009, 18:00 |
| >>Что так надо? В случае методов, могу их не реализовывать! Просто реализация унаследовалась и могу спокойно их вызвать без каких-либо проблем! С конструкторами же, даже если они реализованы в базовом уже не так, я должен явно в секции инициализации конструктора потомка указать вызового конструктора. пример: Child::Child(char * t) : Base(t) {} почему мне это надо делать ? Не пойму логику стандарта, если уж чтото сделано, то почему методы можно наследовать, а конструкторы заново реализовывать надо ? |
| Автор: Gordon 22.7.2009, 18:13 | ||
Может хотябы по тому, что лучше всех знает как инициализировать/"уничтожать" объекты класса его разработчик... |
| Автор: bsa 22.7.2009, 20:18 |
| EvilsInterrupt, ну, например, потому что у конструкторов базового класса название отлично от названия класса потомка. |
| Автор: Леопольд 22.7.2009, 20:34 | ||||||
Какой из конструкторов базового класса должен быть вызван? Уверен, если подумать, то можно найти ещё причины. Если же есть единственный конструктор по умолчанию, то будет вызван именно он.
Конструктор - инициализация объекта во время создания. Как реализация базового конструктора может инициализировать объект наследник? Базовый класс ничего не знает о наследнике. Я лично не могу представить каким образом можно унаследовать реализацию базового конструктора для общего случая. |
| Автор: Lazin 22.7.2009, 20:59 | ||
логика простая: откуда компилятор узнает, какой из конструкторов вызвать, если их несколько? на самом деле конструктор базового класса вызывается всегда, даже если ты его не вызываешь явно, но это будет конструктор по умолчанию |
| Автор: hsilgos 22.7.2009, 23:48 | ||
В будущем стандарте планируется ввести что-то типа наследования. Чтобы не создавать свой пустой конструктор и дергать базовый, можно будет в теле класса написать что-то типа:
|