| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Конструктор производного класса |
| Автор: KasMP 15.7.2009, 12:14 | ||||||||||||||
| Приветствую вас, мои самые-самые Предполагается такая структура классов и их наследников:
Сейчас важны только Figure и Point.
Предполагается, что точка задана в файле примерно так:
С конструктором фигуры все очевидно (но приведу его на всякий случай - вдруг ключ к разгадке проблем именно в нем):
С конструктором точки все тоже очевидно, но почему-то не работает:
Т.е. получается так: мы узнали, что впереди точка; сначала вызвался конструктор Фигуры и прочитал цвет пера; потом вызвался конструктор производного класса Точка и прочитал координаты. Но VS 2008 Express Edition совсем не думает, что все правильно и просто:
Я совсем не понимаю, что не так и что можно с этим сделать |
| Автор: azesmcar 15.7.2009, 12:50 | ||||
Почему? В списке инициализации вызван конструктор базового класса, другое дело, что он вызван неправильно.
|
| Автор: mes 15.7.2009, 12:57 |
потому что это декларация, а не определение конструктора. кстати да, в определении конструктора список инициализации вызывается неверно. |
| Автор: Леопольд 15.7.2009, 12:59 | ||||
Здесь синтаксическая ошибка. Правильно вот так class Point : public Figure { ... public: Point (ifstream *f): Figure(ifstream *f,'1'); ... }; |
| Автор: azesmcar 15.7.2009, 13:00 |
| Автор: Леопольд 15.7.2009, 13:01 | ||
Я опоздал |
| Автор: mes 15.7.2009, 13:05 |
и {} забыл |
| Автор: Леопольд 15.7.2009, 14:07 | ||||||
Я и сам забыл что список инициализации надо писать в определении конструктора, а в объявлении нельзя... Т.е. правильно вот так:
Или так:
|
| Автор: KasMP 16.7.2009, 10:21 | ||||||||
Спасибо вам огромное! Я бы еще долго искала эту незаметную ошибку... Глупее не придумать Я думаю, я совсем уберу этот член: по типу переменной и так понятно, к какому классу-наследнику относится объект - зачем дублировать еще раз Да ладно, с ошибками даже лучше: человек больше вдумывается, больше понимает, больше пишет сам, ... Неправда А ты здесь уже совсем освоился Мы давно до них дошли
Нет, конечно Как тебе вообще такая мысль в голову пришла |
| Автор: mes 16.7.2009, 10:56 | ||||||||
ну так это больше там, чем здесь
посмотрел повнимательней, действительно нет : приношу извинения за ложную тревогу. просто это самая распространенная ошибка при составлении иерархии классов фигур. кстати заглавными буквами в C++ принято именовать макросы, и некрасиво смотрится когда также называют типы или переменные. |
| Автор: KasMP 16.7.2009, 11:49 | ||||
Заглядывай туда чаще - там тоже интересно
|
| Автор: mes 16.7.2009, 12:13 | ||
ах да.. забыл про эти "пережитки" .. в .Net они уже называются "по-человечески": http://msdn.microsoft.com/ru-ru/library/system.drawing.aspx P.S. ox чувствую, что достанется мне сейчас за эти "пережитки", "по-человечески" и за оскорбление религиозных чувств. будем надеяться, что пронесет.. |
| Автор: KasMP 16.7.2009, 13:20 | ||
Имхо логично придерживаться правил, связанных именно с тем, где ты сейчас, а не правил какого-то мифического пространства
Конечно, достанется |
| Автор: mes 16.7.2009, 13:24 | ||
Ну да никуда не деться, если работать с WinAPI придется подстраиваться под их среду. |