0
- 14.02.2012 - 09:33
|
Всем день добрый. Есть идея фикс: язык или библиотека, позволяющие делать такое: // Объявляем объект типа TStringList var List:TStringList ; ... // При первом обращении к объекту, он автоматически создается компилятором // как List:=TStringList.Create() // И следующая инструкция вызовет метод Add класса TStringList List.Add('abc') ; ... // Но при этом я могу позже пересоздать его вручную в совместимый тип type TStringListExt = class(TStringList) List:=TStringListExt.Create() : Какой язык позволяет делать нечто подобное? | |
1
- 14.02.2012 - 09:34
| Синтаксис Паскаля просто для примера... я понимаю, что скорее всего, копать нужно в сторону скриптовых языков | |
2
- 14.02.2012 - 09:36
|
Еще, я знаю, что C++ позволяет в одной строке делать и декларацию, и создание (что-то вроде): TStringList *List = new TStringList() Но мне хочется, чтобы все декларации были в одном месте (условно, блок var), а создание объекта - по мере необходимости на автомате. | |
3
- 14.02.2012 - 09:44
| Кажется не совсем удобно это будет. В этом случае явно можно будет использовать только конструкторы без параметров. | |
4
- 14.02.2012 - 10:36
|
В Visual Basic можно объявлять: Dim MyObj As New StringList Объект будет создаваться при первом обращении. Его можно точно так же уничтожать и пересоздавать. | |
5
- 14.02.2012 - 10:42
|
боги программирования, удачные предприниматели (другая иерархия куле) в треде. сцкнх! скажи па русски че те нада и для чего? а то топик уже доставляет. sserj, вот так лаконичность и законченность изложения у дельфиста (перни фиалкой, прошу). | |
6
- 14.02.2012 - 10:45
|
5 это не в твой огород палка. тут два поциэнта. --- выносите RCorpa в студию. молю! картина не полна. | |
7
- 14.02.2012 - 11:01
|
5-Mikle Quits > Спасибо, буду пробовать. 6-Продаются саженцы > По теме-то есть что сказать? | |
8
- 14.02.2012 - 11:40
|
3-NTFS_ > Кажется с++ позволяет делать проще: Объявление вида: MyClass MyVariable; Автоматически создает объект. И при выходе из области видимости - автоматом вызывает деструктор... если я ничего не путаю. | |
9
- 14.02.2012 - 11:42
|
Если конструктор имеет параметры, то объявляется вот так: MyClass MyVariable(Type Param1, ... Type ParamN); | |
10
- 14.02.2012 - 11:45
| А декларация типов (классов) не пойдет, и создание объектов этого типа (класса "когда надо и где хочу"? | |
11
- 14.02.2012 - 12:26
| 11-drmiller > Не, я хочу, чтобы конструктор вызывался неявно. А схема из (9) не работает, по крайней мере, с компилятором MinGW для Windows. Еще в студии проверю, но по-моему, C++ такого не позволяет в принципе. | |
12
- 14.02.2012 - 12:32
|
12-NTFS_ > Ubuntu + Code::Blocks IDE + gcc.. Неделю назад брекпойнт в конструкторе срабатывал при объявлении а-ля п.9 Почему с MinGW все плохо - ХЗ :( п.9. "... если я ничего не путаю." - было сказано касаемо деструктора.. это не проверял. | |
13
- 14.02.2012 - 12:42
|
13-drmiller > + Страуструп вроде обещал что пработать будет. + Из букваря: "Сначала же создадим переменную типа soldier. soldier a; a.x = 3; a.y = 4; a.ammo = 5; Здесь мы создали объект a класса soldier." Сцылко: http://shatalov.su/ru/articles/cpp_primer/class_0.php | |
14
- 14.02.2012 - 12:56
|
только попробывал - в билдере конструктор вызывается при определении. то есть some_class some_obj; //прямо вот здесь идет вызов конструктора, т.е. объект фактически создается открытый вопрос - зачем создавать именно при первом обращении? можно и такое замутить, но на костылях - создать указатель на объект, каждый вызов относящийся к объекту оборачивать шаблоном функцией проверяющей что указатель не ноль и при необходимости создающей объект. | |
15
- 14.02.2012 - 12:57
| 12- в принципе позволяет если я правильно понял вопрос) | |
16
- 14.02.2012 - 13:38
|
В студии действительно работает... TMyClass MC ; printf ("%d\n",MC.x()) ; Почему не пошло в MinGW - я так и не понял :-) Всем спасибо, я получил ответ на свой вопрос. Старый добрый C++... | |
17
- 14.02.2012 - 15:37
| Еще раз всем спасибо, действительно, просто нужно было получше вникнуть в C++. Мощный язык, если умеючи :-) | |
18
- 14.02.2012 - 17:31
|
18 "просто нужно было получше вникнуть в C++" да кагбэ еще вникать не перевникать. "Старый добрый C++..." новый, злой. не? нтфс. а представь если еще и с .net и с ms sql clr hosting'ом разобраться так вообще оттот твой глюкавый проект заведется с полпинка. несмотря на кривость =D гыгы. p.s. тока ты эта. в реальный проект с++ еще не тяни. еще много вникать не перевникать! | |
19
- 14.02.2012 - 17:38
|
18 почитай еще разницу в c++ между Код: MyClass myClassObj; MyClass* myClassObj = new MyClass(); MyClass^ myClassObj = gcnew MyClass(); // не стандарт. есть тока в MS | |
20
- 14.02.2012 - 19:09
|
Я вообще-то не упертый фанатик... признаю свои ошибки, когда не прав или некомпетентен. вообще я так и не понял зачем тебе это все. хз. Я же написал - хочется странного... | |
21
- 14.02.2012 - 20:18
|
1-NTFS_ > могу себе такое представить только для классов, у которых есть конструкторы по умолчанию. А вообще, к той же самой делфе можно прикрутить препроцессор (будет генерировать прокси-классы). | |
22
- 14.02.2012 - 20:59
| Водки хочца..... | |
23
- 15.02.2012 - 04:20
|
Этому топику не хватает картинки с троллейбусом из буханки хлеба: А если по теме, то совершенно непонятна цель данного изврата. Ну создай на стеке объект, какие проблемы-то... А в куче создавать неявно это же самоубийство, будешь потом головой об клавиатуру биться, если где-нибудь утечка памяти обнаружится - непонятно будет, в каком месте объект создался... | |
24
- 15.02.2012 - 04:40
| В языках со сборщиком мусора утечки может и не быть, но только вот подобная фича идеологически размоет понятие владельца объекта... стимулируя школоту писать говнокод. Для меня это страшный сон - не знать, где создался объект. :) Плюс ещё куча интересных спецэффектов вылезет, например, когда совершенно непонятно, кто и когда вообще всё создаёт в программе: например, объект A создаёт объект B путём вызова его метода, B создаёт C вызовом метода, а C создаёт A вызовом метода. :) И получаем в итоге забивание памяти вплоть до out of memory. | |
25
- 15.02.2012 - 05:02
| 24-SilverEye > Да чего тут непонятно-то. NTFS_ просто развел всех на пустом месте, задал фактически элементарный вопрос, на который в 9, 10 и 14 был дан исчерпывающий ответ. И сразу получил общую картину уровня отвечающих :) | |
26
- 15.02.2012 - 05:27
|
26 не ссы в глаза, молю, господин. :D p.s. доставь еще своих букв в тред! | |
27
- 15.02.2012 - 05:30
|
23 и ты явился, светоч! p.s. разбавь годноту буквами за жись. | |
28
- 15.02.2012 - 09:00
|
20 - когда я в MS Visual "так называемом" C++ увидел конструкции вида MyClass^ myClassObj я удивленно огляделся вокруг и вопросил "что это за гамно?", а знающие люди сказали "это Майкрософт дурью мается - в программы которые "как бы" C++ запихивает шлак от CLR или как там это называется... как будто нельзя было выразить все для C++ - повышают кругозор народа одним словом" | |
29
- 15.02.2012 - 09:26
| SilverEye совершенно непонятно, кто и когда вообще всё создаёт в программе Вообще-то, объект будет создаваться там, где объявлен. Например объект АА объявлен в классе Б. Он создастся при первом обращении, но обратиться к нему можно только через объект ББ класса Б. Конечно, в C++ можно получить указатель на АА, уничтожить ББ, а потом через указатель пытаться вызвать какой-нибудь метод АА, но это одно из извращений. Моё имхо такое, что высокоуровневыми извратами надо заниматься на нормальных ЯВУ, где нельзя выстрелить себе в ногу. | |
30
- 15.02.2012 - 09:31
|
26-Sserj > Да ладно, никогда я не разводил... просто не знал, что С++ позволяет это использовать. В ObjectPascal такого нет. Если бы я мог сформулировать вопрос для Яндекса, я бы и форум не доставал. А нужно мне это было для простых разовых объектов, например, проверка какого-то условия, реализованного как функция класса. Теперь буду думать о реализации части логики на C++ вместо FPC. | |
31
- 15.02.2012 - 13:02
|
29 vxg "... мно?", а знающие люди сказали "это Майкрософт дурью мается - в программы которые "как бы" C++ запихивает шлак от CLR или как там это называется... как будто нельзя было выразить все для C++ - повышают кругозор народа одним словом"... " какие же они знающие. если свое незнание выдают за знание? передай им что они не только не поняли, ни что это, ни для чего это, ни когда применять. :D | |
32
- 15.02.2012 - 13:20
|
"... А нужно мне это было для простых разовых объектов, например, проверка какого-то условия, реализованного как функция класса. ..." я правильно понял, из за вшивенькой функции, не хочется плодить определения классов да? почитай "анонимные методы", делегаты, лямбда выражения и т. п.. в c# это есть, в других языках ищи аналоги. пример не кидаю, с тела пишу. "... Теперь буду думать о реализации части логики на C++ вместо FPC. ..." ни в коем случае. ты не только не решил свою истинную проблему, но и свяжешься с языком, которого не знаешь. и поверь, при таких раскладах, как тут уже выше сказали, отстрелишь себе ногу. | |
33
- 15.02.2012 - 14:34
| 32 - ну так объясни для чего господам из MS нужно было привносить в самодостаточный язык C++ иноязычные конструкции без понимания которых невозможно создать программу в Visual Studio потому как все что касается GUI идет через эту "срань"? | |
34
- 15.02.2012 - 14:35
| ...в то время как все прогрессивное человечество в лице Builder C++ спокойно оперирует объектами GUI на отлично подходящем для этого языке C++ | |
35
- 15.02.2012 - 14:45
|
34 "... ну так объясни для чего господам из MS нужно было привносить в самодостаточный язык C++ иноязычные конструкции..." мне кажется, если я обьясню, то ты никуя непоймешь. потому, что смотри ниже. ^_^ "... ноязычные конструкции без понимания которых невозможно создать программу в Visual Studio потому как все что касается GUI идет через эту "срань"... " чо? O_o. | |
36
- 15.02.2012 - 14:50
|
Грю, нада водки! Ваташи тачи ва бодока ни о номимасё? | |
37
- 15.02.2012 - 14:57
| 36 - если ты импотент или неполноценный так и скажи, а фразы "см. ниже" или "курите маны" все умеют писать. нечего тебе сказать получается, не волочешь ты в предмете. | |
38
- 15.02.2012 - 15:09
|
38 а накуя мне обьяснять тебе о c++ managed extensions, если ты даже не знаешь, что такое. net. (не c#, а .net). "... сли ты импотент или неполноценный так и скажи..." а чо тебя так заботит моя потенция? :D thread just for lulz! | |
39
- 15.02.2012 - 15:17
| vxg: но нид реакшн фор зэт. У МЧ завышено ЧСВ и полное ФГМ. | |
| Интернет-форум Краснодарского края и Краснодара |