1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| sheka |
3.05.2011 21:32
Сообщение
#1
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Нужно загрузить из файла объект (TTitle) наследник родителя(TPoint).
У родителя есть 2 метода: procedure Load(const Path: string; var fconfig: text); virtual; overload; Реализованы так: procedure TPoint.Load(const Path: string; var fconfig: text); и у наследника: procedure TTitle.Load(const Path: string; var fconfig: text); Проблема в том, что когда в TTitle.Load происходит inherited Load(Path,finfName); далее вызывается TPoint.Load(const Path, FileName: string); который в свою очередь вместо мной желаемого procedure TPoint.Load(const Path: string; var fconfig: text); вызывает полиморфный метод наследника TTitle.Load(const Path: string; var fconfig: text); т.е. теоретически происходит зацикливание, а практически неправильная прочитка файла. Как эту ситуацию обойти? Т.е. чтобы inherited Load(Path,finfName); выполнял только методы родителя или как-то так. |
![]() ![]() |
| sheka |
4.05.2011 14:02
Сообщение
#2
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Хм..
Меня интересует чуть другой код: (Показать/Скрыть)
который выдает в такой реализации: A.P (string, string) A.P (string, text) а в такой: (Показать/Скрыть)
Вот это: A.P (string, string) //В вызывает родительский Р B.P (string, text) //Создается В A.P (string, string) //вызывается inherited B.P (string, text) //вот здесь идет вызов метода В вместо мной желаемого А, что почему-то в вашем коде и происходит, а в моем - нет. итд., идет зацикливание Как вы вставляете "скрины" текстом? |
sheka Полиморфизм + Перегруженные методы 3.05.2011 21:32
IUnknown Проблема в том, что когда в TTitle.Load происходит... 3.05.2011 23:50
IUnknown Оно никак не будет работать иначе. Ни когда закомм... 4.05.2011 14:44
sheka Исправил, вот:type
A = object
procedure P(co... 4.05.2011 17:25
IUnknown Да, вот с Object-ами вижу зацикливание... Попробую... 4.05.2011 17:35
IUnknown М-да... Вот тебе как раз и разница между Object/Cl... 4.05.2011 18:04
sheka А откуда тогда она знает когда должно выполняться ... 4.05.2011 19:31
IUnknown В таком случае надо было и приводить код, который ... 4.05.2011 20:15
sheka Уже было :) как раз с Overloadом.
ТР. Так как пишу... 4.05.2011 20:53![]() ![]() |
|
Текстовая версия | 8.12.2025 23:08 |