Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Внизрекурсия... без рекурсии Найти похожие ветки
← →
iskatel © (2005-05-27 02:37) [0]есть класс month, конструктор которого должен создать еще один объект того же класса month за предыдущий месяц (он используется внутри класса) но, если написать month(m-1) (где м- номер месяца)
то конструктор этого м-1 будет создавать еще один объект предыдущего месяца и так далее... но нужен только один предыдущий, остальные не нужны...
← →
Плохиш © (2005-05-27 02:40) [1]но нужен только один предыдущий, остальные не нужны...
Как это "не нужны"? --> есть класс month, конструктор которого должен создать еще один объект того же класса month за предыдущий месяц
С задачей разберитесь сначала.
← →
ЮЮ © (2005-05-27 03:36) [2]замени "конструктор которого должен создать еще один объект" на "конструктор которого может создать еще один объект при вызове некоторого метода".
А ещё лучше, сделать просто свойство PriorMonth: TMonth, созать два объекта m1 и m2 и второму задать m2.PriorMonth := m1, а в методах учитывать, что PriorMonth может быть и nil
← →
ЮЮ © (2005-05-27 03:38) [3]в первом абзаце сдедует читать
... на "некоторый метод которого может создать еще один объект".
← →
TUser © (2005-05-27 08:37) [4]constructor Create (NeedAnother: boolean = true);
begin
if NeedAnother then
FPrevious:=TMonth.Create(false);
end;
← →
Mystic © (2005-05-27 11:54) [5]Вообще-то лучше всего было бы сразу описать, какую задачу ты решаешь. Предлагаемое тобой решение, мягко говоря, вызывает опасения. Но если очень сильно надо, то можно
(а) Передавать в конструктор параметр
(б) Использовать конструкторы с разными именами
(в) Создавать экземпляр класса "предыдущий месяц" только в момент первого обращения к нему
(г) Разделить класс TMonth на два (TMonthWithoutPrevMonth и наследник от него TMonth).
← →
iskatel © (2005-05-27 13:33) [6]задача была такая:
расчитывается кое что за текущий месяц + прибавляются некоторые данные за предыдущий месяц, поэтому все было сделано рекурсивно, и все отлично считалось от n-ного месяца до января, но теперь задача изменилась: потребовалась ручная корректировка результатов, тоесть теперь нельзя перерасчитывать предыдущие месяца (все результаты рассчетов сохраняются), но нужно брать данные из одного предыдущего чтоб их использовать при рассчете текущего... изначально рекурсия была введена для того чтоб оперативно пересчитывать все, обнаружив ошибку во введенных данных скажем в январе :-)
т.е. класс month уже существует и надо просто его элегантно изменить, поэтому лучшим решением я считаю предложение ЮЮ, так как свойство PriorMonth уже есть (ему присваевается в рекурсии месяц м-1) и соответственно проверка на nil тоже есть (чтоб месяц не стал меньше января), осталось только сделать это св - во public...
PS. а аналогом статической переменной для ф-ции служат только memory mapped files? проще ничего нет, такой переменной чтоб была видна из всех объектов данного класса? а то мож есть, просто я торможу :-) тогда все это можно было бы решить на основе такой переменной...
← →
iskatel © (2005-05-27 13:42) [7]PSS to Mystic
(a) и (в) - одно и тоже (если не использовать MMF), хотя тоже вариант
(б) - что за икс??? име конструктора=имени класса, если только (б)+(г) :-))) -тоже в принципе мона :-)
ты бы скомпоновал (ав) и (бг) а то спросони я долго въезжал :-)
хотя тоже неплохой вариант, в отличие от предложения ЮЮ "наружу" ничего не вылезет и не придется переделывать еще и там...
← →
iskatel © (2005-05-27 13:45) [8]всем спасибки, я наконец - то проснулся и решил что лучьше сделать (б)+(г) от Mystic"а
← →
Digitman © (2005-05-27 13:49) [9]
> аналогом статической переменной для ф-ции служат только
> memory mapped files?
MMF-механика, мягко говоря, служит несколько для иных целей
> переменной чтоб была видна из всех объектов данного класса?
область видимости любых идентификаторов определяется местораположением их декларации в тексте проекта или юнита
любой идентификатор, объавленный в разделе implementation (если речь идет о юните) ЗА пределами реализаций любых ф-ций/процедур/методов, будет иметь видимость, достаточную для обращения к нему из методов класса, реализованного в том же юните
← →
iskatel © (2005-05-27 13:51) [10]Digitman, т.е. даже из другого объекта того же класса?
← →
Девушка с веслом (2005-05-27 13:53) [11]Digitman © (27.05.05 13:49) [9]
И даже шире, но только ниже.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c