Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.044 c
14-1116833798
GRAND25
2005-05-23 11:36
2005.06.14
Обсудим последнее московское дерби?


1-1117026254
balamutik
2005-05-25 17:04
2005.06.14
проблемы с dll


14-1116953519
Vulko
2005-05-24 20:51
2005.06.14
Как искуственно вызвать исключение на c++?


14-1116698692
mySh
2005-05-21 22:04
2005.06.14
Не грузятся картинки в PHP


1-1117344819
Андрей Молчанов
2005-05-29 09:33
2005.06.14
Чтение файлов недоступных для чтения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский