Войти
ПрограммированиеФорумОбщее

Вопросы по Delphi (2 стр)

Страницы: 1 2 3 417 Следующая »
#15
19:11, 15 мая 2022

>>но все объекты (инстансы классов), всегда создаются в динамической памяти, и не передаются как ссылки.
Опа! Там нельзя объявить синглтон? Становится всё интереснее.

А для чего нужен модификатор override? Сперва я полагал, что это какая-то альтернатива virtual, но гляжу что virtual тоже имеется.
Особенно интересно, применительно к конструкторам и деструкторам. Делфи по умолчанию не допускает совпадающих имён функций у наследуемого класса, причём это конструкторов\деструкторов касается? Или я не так понял?

#16
(Правка: 19:25) 19:24, 15 мая 2022

g-cont
> Опа! Там нельзя объявить синглтон? Становится всё интереснее.
можно конечно.
старое доброе название "глобальная переменная"
так например "Application" - это синглтон.
или какой-нить

var
  Form1:TForm1;

синглтоны, но при это теже самые объекты

g-cont
> А для чего нужен модификатор override? Сперва я полагал, что это какая-то
> альтернатива virtual, но гляжу что virtual тоже имеется.
переопределять виртуальные методы в наследниках.

#17
(Правка: 19:25) 19:24, 15 мая 2022

g-cont

> Подсажите, что это вообще такое?
> TRefGUID = packed record

Типа да, struct с union в конце. До case могут идти обычные поля, после case - объединенные в одну область памяти, Integer или любой перечислимый тип пишется от балды, вроде афтар Паскаля хотел контролировать тип значения, потом плюнул и забыл.

> Следующий вопрос. В Делфи нет ссылок, как я понял. Как он понимает какой аргумент функции надо скопировать, а на какой сослаться?
Аргументы, перед которыми var - переменные аргументы, то есть ссылки. В них нельзя передавать значение, только переменную
> Или всё что класс - автоматически делается ссылка
Дельфовый class - это указатель, экземпляр создается только на heap

> Опа! Там нельзя объявить синглтон?
Врядли. Есть глобальные переменные, но не запретишь множественное создание, как в цэплюсе.

> А для чего нужен модификатор override?
Перегрузка вирт функций, подробности в Borland Help
> Делфи по умолчанию не допускает совпадающих имён функций у наследуемого класса
Делфи допускает перегрузку функций, насколько помню с давнего опыта

#18
(Правка: 19:28) 19:28, 15 мая 2022

g-cont
> Особенно интересно, применительно к конструкторам и деструкторам.
ну деструктор всегда виртуальный. (оно очевидно и потребно).

виртуальный конструктор используется для динамического создания объектов.
Когда класс от которого создаётся объект передан классовой переменной.

g-cont
> Делфи по умолчанию не допускает совпадающих имён функций у наследуемого класса,
> причём это конструкторов\деструкторов касается? Или я не так понял?
пост выше.
или указывай явно overload, или пиши override.

Можно ещё reintroduce, но это необхдимо для OOП.

#19
(Правка: 19:31) 19:31, 15 мая 2022

Aslan
> Врядли. Есть глобальные переменные, но не запретишь множественное создание, как
> в цэплюсе.
можно, что-то типа такого:

type
  TMySingleton = class
  end;

var
  Singleton: TMySingleton = nil;

implementation

constructor TMySingleton.Create;
begin
  if Assigned(singleton) then 
    raise Exception.Create('no good');
  inherited Create;
  Singleton := self;
end;

end.
#20
19:41, 15 мая 2022

g-cont
> Хочу использовать формат этих компонентов в качестве базы для своего GUI на
> первое время
А Object Inspector там будет?

#21
19:42, 15 мая 2022

Aslan
> А Object Inspector там будет?
имхо, ради этого каша и заваривается

#22
19:50, 15 мая 2022

skalogryz
Загадка природы - как сделать в Сишке property и рефлексию и метаклассы и сриализацию

#23
(Правка: 20:03) 20:02, 15 мая 2022

Aslan
> Загадка природы - как сделать в Сишке property и рефлексию и метаклассы и
> сриализацию
легко! выкинуть Сишку и писать на Паскале.

но я уверен, что g-cont момент с сериализацией и rtti продумал

#24
(Правка: 1:14) 1:12, 16 мая 2022

Ладно-ладно, там не настоящий С++. Там виртуальная машинка с синтаксисом С++. Так что с метой и конструкцией классов на лету проблем не будет.

Тему переименовал буду тут свои вопросы задавать. Как правило в учебниках об этом или не пишут или настолько косным языком, что ничего не понятно.

#25
(Правка: 1:42) 1:30, 16 мая 2022

а я вот не понял. если тебе только dfm распарсить, нафига тебе дальше в делфи лезть?!
или ты портируешь чей-то код?

g-cont
> Ладно-ладно, там не настоящий С++. Там виртуальная машинка с синтаксисом С++
...на делфи написали керстовиртомашину?!

Aslan
> Загадка природы - как сделать в Сишке property и рефлексию и метаклассы и сриализацию
а ещё подумалось, что постоянно ходят и ноют, дескать - "паскаль - хлам, потому что там begin и end".
так вот, прикрутить таки некий транслятор, из си-синтаксиса в паскаль синтаксис.

Естественно, получится не тот самый честный Си(++), но что-то Си-образное, что будет в паскаль транслироваться.

+ ромовая баба
#26
8:20, 16 мая 2022

g-cont
> Ладно-ладно, там не настоящий С++. Там виртуальная машинка с синтаксисом С++.
> Так что с метой и конструкцией классов на лету проблем не будет.

Нет там никакой виртуальной машины, С++ Builder просто-напросто, умеет линковать объектники от Delphi. При этом, если наследоваться от VCL классов - получается эпичный глюкодром.

#27
10:01, 16 мая 2022

g-cont
> А для чего нужен модификатор override? Сперва я полагал, что это какая-то
> альтернатива virtual, но гляжу что virtual тоже имеется.
если нужна виртуальная функция, то в родительском классе ее помечают virtual, а в наследниках - override. Если нужны две функции с одинаковым именем но разными параметрами, то помечается overload. Есть еще reintroduce, но в исходниках vcl он вроде не встречается.

#28
11:55, 16 мая 2022

>>а я вот не понял. если тебе только dfm распарсить, нафига тебе дальше в делфи лезть?!
Нормальные люди учат язык чтобы писать на нём программы. Я пишу конвертор исходного кода Delphi->C++ чтобы не учить язык. Возникла такая необходимость. Конвертор я напишу примерно за неделю, а глаз за непривычные конструкции Delphi будет минимум пару месяцев цепляться - экономия времени.

>>...на делфи написали керстовиртомашину?!
Я делфи вообще не знаю. Виртмашина на С++ написана, с синтаксисом С++. Смысл замуты - расширенная метаинформация и конструирование новых классов на лету, ну и сериализация конечно. Ну корочи стандартный набор ништяков VM + привычный синтаксис.

>>Нет там никакой виртуальной машины
Там - нет. А у меня есть.

>>если нужна виртуальная функция, то в родительском классе ее помечают virtual, а в наследниках - override
В крестах override тоже появился, с 17-й штоли версии. До этого оставалось только надеяться, что компилятор сам всё правильно поймет.

>>две функции с одинаковым именем но разными параметрами, то помечается overload
Вроде как это опциональный модификатор с которым дедуктор становится умнее что ли. Ну я так это понял из корявого описания в учебнике.

>>Есть еще reintroduce
Это когда метод в наследнике принудительно выбрасывают из vtable?

#29
12:05, 16 мая 2022

Так, вроде бы всем ответил, теперь новая порция вопросов :)

>>но все объекты (инстансы классов), всегда создаются в динамической памяти, и передаются как неявные ссылки.
А если я объект на стеке создаю? Всё равно будет в динамической памяти размещён?

Итак, по аргументам функции, как я понял:
1. На объекты всегда автоматически формируется ссылка
2. На любые другие типы ссылка формируется, при наличи модификаторов const и var, соответствуют const & и &

Как устроены массивы в делфи? Статичные понятно, даже если там указан отрицательный диапазон, достаточно сделать ремап.
Есть ли в делфи динамические массивы? Кто-то мне вроде говорил, что нету, но может я неправильно понял.

Указатели на функции. Типичный вариант выглядит как-то так:

FnFreeFunc      = procedure(ptr: Pointer); cdecl;

Тут вопросов нет. Но иногда в конце идёт приписка of object;
Т.е., как я понимаю указатель на функцию, являющуюся членом произвольно класса?

Структуры в Delphi являются аналогом структур в Си? Там нельзя объявлять функции или классы?

Страницы: 1 2 3 417 Следующая »
ПрограммированиеФорумОбщее