![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Доброго времени суток.
Имеется класс TProblem с методом Solve:
где MainSolveRoutine реализуется потомком (например Problem1 = class(TProblem)), и полученный в ней результат должен возвращаться в FSolution. Правильна и возможна ли такая структура? Стоит ли и есть ли возможность ее улучшить? Спасибо. Это сообщение отредактировал(а) Keeper89 - 9.8.2010, 13:54 |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
правильна, для этого придуманы virtual методы - вызов метода потомка из родителя Добавлено @ 14:48 имеет смысл если таких потомков несколько и у каждого своя реализация MainSolveRoutine(); Это сообщение отредактировал(а) Frees - 9.8.2010, 14:48 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Frees, ок. А как тогда реализовать дочернюю процедуру с возвращением значений в родительский FSolution?
|
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
не совсем понял что такое FSolution понял FSolution не принадлежит классу, поэтому она везде будет иметь одно и тоже значение.. Добавлено через 3 минуты и 57 секунд FSolution - сделай полем класса TProblem и пиши в нее, в потомках из нее можешь читать... Это сообщение отредактировал(а) Frees - 9.8.2010, 14:57 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 18 Всего: 50 |
Кстати, тип Real - устаревший. Используй Double. |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Qu1nt, я его и использую, это просто для примера.
Это сообщение отредактировал(а) Keeper89 - 9.8.2010, 23:11 |
|||
|
||||
| pseud |
|
||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
Keeper89, ну как бы так...
проверка:
-------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||
|
|||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
pseud, спасибо, утром реализовал как раз такую вещь
|
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Вопрос в тему. Если во втором случае перенести
из protected в private, будут соответствующие ворнинги. Стоит так делать или лучше оставить в protected? |
|||
|
||||
| pseud |
|
||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
варнингов не будет, будет лишь хинт:
А какой смысл переносить в private? Только если ты планируешь создавать классы-наследники TBigProblem, описываемые в других модулях, и в них ну совсем нельзя переопределять метод MainSolveRoutine. Понижать видимость не принято. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||
|
|||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
||||
|
||||
| cat512 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
А что мешает использовать FSolution в секции Private? |
||||||
|
|||||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
напрмер, вот это:
-------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Ну так сделай свойство у класса
И юзай его другим классом. Предыдущими примерами ты нарушаеш инкапсуляцию |
|||
|
||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
ОФФ
во-первых, не я держатель темы. во-вторых, в теме поднят вопрос "Как намазать хлеб на масло?". А твой ответ звучит как "Масло нужно достать из холодильника, а не из шкафчика" в-третьих, тема давно решена и нет никакого смысла вываливать ее на верх раздела. Добавлено через 6 минут и 46 секунд а с полиморфизмом и наследованием я ничего хоть не напорол? -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |