Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
Delphi 6-7

Теоретический пробел в TObject.Create

01.09.2023, 13:00. Показов 7152. Ответов 180
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую!

Возник у меня некий теоретический пробел по поводу конструктора TObject.Create.

C одной стороны, он ведет себя, как функция, возвращающая указатель на созданный экземпляр.
С другой стороны, сам Delphi считает его процедурой.
В хелпе указано, что TObject.Create выделяет память, но не инициализирует данные. Но память выделяет.
А в исходниках все тело конструктора состоит из begin/end.

Правильно ли я понимаю, что этот конструктор - что-то типа разновидности команды для препроцессора, где компилятор Delphi, встречая этот вызов, сам организовывает выделение памяти и возвращение адреса созданного экземпляра?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.09.2023, 13:00
Ответы с готовыми решениями:

Cannot convert 'void (_fastcall * (_closure )(TObject *,char &))(TObject *,char &)' to 'TKeyPressEvent'
доброго времени суток. роект был создан в builder 2007, а при попытке его скомпилировать на rad studio 2010 выдается ошибка: ...

Reverse for 'create' not found. 'create' is not a valid view function or pattern name
Всем привет, появилась проблема. Всё делал по инструкции, по итогу всё равно выбило ошибку: NoReverseMatch at / Reverse for 'create'...

TFilestream.create [cannot create file]
function bat: string; begin with TFileStream.Create(extractfilepath(application.ExeName)+'bin\gcc\bin\compile.bat', fmCreate) do ...

180
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
18.09.2023, 01:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Constcat Посмотреть сообщение
Если мы будем заниматься демагогией, то можно впихнуть процедуру практически в любое выражение
Вы не процедуру в них впихиваете, а её адрес. Сама процедура при этом не выполняется. и настоящего результата выполнения нет от слова совсем.
Так что демагогией именно вы занимаетесь.
1
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
18.09.2023, 08:43  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Вы не процедуру в них впихиваете, а её адрес. Сама процедура при этом не выполняется. и настоящего результата выполнения нет от слова совсем.
Я же написал - формально. Процедура, как и функция - "поставщики" результата. В данном случае, адреса.

Цитата Сообщение от northener Посмотреть сообщение
А я писал про использование функций в выражениях, в которые процедуру ну никак и никогда не впихнуть.
И своим примером я иллюстрировал ваши слова "ну никак и никогда не впихнуть". Впихнул?)))))
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
19.09.2023, 02:10
Цитата Сообщение от Constcat Посмотреть сообщение
И своим примером я иллюстрировал ваши слова "ну никак и никогда не впихнуть". Впихнул?)))))
Нет. От слова совсем.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
19.09.2023, 08:36  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Нет. От слова совсем.
Упрямство - это хорошее качество, разумеется.
Но процедура в моем примере находится в правой части выражения. )))
0
 Аватар для mr-Crocodile
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
19.09.2023, 16:08
Цитата Сообщение от Constcat Посмотреть сообщение
Упрямство - это хорошее качество, разумеется.
не всегда. И зря ты себя за это хвалишь

Цитата Сообщение от Constcat Посмотреть сообщение
Но процедура в моем примере находится в правой части выражения. )))
тело процедуры при этом точно выполняется?

1
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
19.09.2023, 16:26  [ТС]
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
тело процедуры при этом точно выполняется?
ТЗ было другое)))

Цитата Сообщение от northener Посмотреть сообщение
А я писал про использование функций в выражениях, в которые процедуру ну никак и никогда не впихнуть.
Про тело процедуры не было сказано ни слова.))
И мой пример как раз и опровергает это "никак и никогда".

Но если вернутся к исходной теме треда, то она как раз посвящена тому, что процедура используется, как функция.
Напомню, что речь шла про TObject.Create, который формально являясь процедурой, используется, как функция.
0
 Аватар для Beltar
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
19.09.2023, 19:31
А в каком месте Create является процедурой и зачем указывать тип, когда он очевиден?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
19.09.2023, 19:46
Create это конструктор, который возвращает ссылку на созданный объект.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
19.09.2023, 20:03  [ТС]
Цитата Сообщение от Beltar Посмотреть сообщение
А в каком месте Create является процедурой и зачем указывать тип, когда он очевиден?
0
 Аватар для Beltar
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
19.09.2023, 20:16
Это уже из разряда, когда фанаты HoMM III обиделись на разработчиков за то, что те захотели добавить в мир игры фракцию каких-то роботов, потому что по каким-то там сеттингам, раскрытым в играх, в которые героеводы даже не играли, если вообще слышали об их существовании, мир Might and Magic, оказывается, содержит научную фантастику.

Ни в одной книге по Delphi я не встречал утверждения, что конструктор - это процедура, более того, конструктор с деструктором всегда так именовались конструктором и деструктором, а не "процедурой\функцией, называемой конструктором".

На процедуры похожи операторы Exit, Break, Continue, но, очевидно, они таковыми не являются.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
19.09.2023, 21:29  [ТС]
Цитата Сообщение от Beltar Посмотреть сообщение
Ни в одной книге по Delphi я не встречал утверждения, что конструктор - это процедура, более того, конструктор с деструктором всегда так именовались конструктором и деструктором, а не "процедурой\функцией, называемой конструктором".
Ну вот. Лично сам Delphi 7 именует Create процедурой. И не нужно далеко за книгами ходить.
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
20.09.2023, 02:18
Цитата Сообщение от Constcat Посмотреть сообщение
Про тело процедуры не было сказано ни слова.))
И мой пример как раз и опровергает это "никак и никогда".
Ну и кто тут демагог?
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
20.09.2023, 08:38  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Ну и кто тут демагог?
Так я и не спорю.)))
P.S. Но ТЗ нужно тщательнее составлять
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
20.09.2023, 18:47  [ТС]
Цитата Сообщение от Beltar Посмотреть сообщение
На процедуры похожи операторы Exit, Break, Continue, но, очевидно, они таковыми не являются.
procedure Exit;
Description
In Delphi, the Exit procedure immediately passes control away from the current procedure. If the current procedure is the main program, Exit causes the program to terminate.

procedure Break;
Description
The Break procedure causes the flow of control in Delphi code to exit a for, while, or repeat statement and continue at the next statement following the loop statement.

procedure Continue;
Description
In Delphi code, the Continue procedure causes the flow of control to proceed to the next iteration of the enclosing for, while, or repeat statement.
0
 Аватар для Beltar
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
20.09.2023, 18:54
А ключевые слова if и then тогда тоже процедуры.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
20.09.2023, 19:00  [ТС]
Цитата Сообщение от Beltar Посмотреть сообщение
А ключевые слова if и then тогда тоже процедуры.
Неа.)))))
If statements
...
There are two forms of if statement: if...then and the if...then...else.
...
0
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 27
20.09.2023, 19:06
Цитата Сообщение от Beltar Посмотреть сообщение
А ключевые слова if и then тогда тоже процедуры.
if - функция, а then - особая форма процедуры, что-то среднее между конструктором и деструктором. А есть ещё else... Но этой штукой лучше не пользоваться, потому что никто до сих пор так и не знает, что это такое.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
20.09.2023, 19:48
Цитата Сообщение от Constcat Посмотреть сообщение
procedure Exit;
Ну уж нет, это точно не процедура. Если на то пошло, то процедура состоит из набора команд и вызывается с помощью команды Call, чего в случае с Exit, Break, Continue не происходит.
0
 Аватар для Beltar
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,662
20.09.2023, 19:52
На заборе написано что? А за забором находится по факту?

Цитата Сообщение от XpomAI Посмотреть сообщение
А есть ещё else... Но этой штукой лучше не пользоваться, потому что никто до сих пор так и не знает, что это такое.
Ну вообще доказано, что любой алгоритм можно записать с помощью операторов условия и цикла с предусловием, так что да, наверное, лучше не пользоваться.
0
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 27
20.09.2023, 20:04
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
тело процедуры при этом точно выполняется?
А это тоже совсем не сложно. ))))))

Цитата Сообщение от Constcat Посмотреть сообщение
Delphi
1
2
3
4
5
var
  i: integer;
  s: string;
i:=integer(addr(MyProc)) + 1000;
s:=inttostr(integer(addr(MyProc))) + 'string';
Заменим в пятой строке 'string' на функцию, вызывающую в своём теле MyProc. Вуаля! Процедура выполнилась. ))

Добавлено через 7 минут
Цитата Сообщение от AzAtom Посмотреть сообщение
Create это конструктор, который возвращает ссылку на созданный объект.
Мы, вроде уже выяснили, что не всегда. Строго говоря, возврат адреса не является обязательным атрибутом конструктора. В Дельфи - да, но это особенность её классовой )))) организации.

Добавлено через 3 минуты
Цитата Сообщение от Beltar Посмотреть сообщение
любой алгоритм можно записать с помощью операторов условия и цикла с предусловием
Что правда? Я (бездоказательно) считал, что с помощью только операторов условного и безусловного переходов. Или смысл в том, что goto заменяется while-ом?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2023, 20:04

how can i create mainmenu with any fonts wich i wont and how can i create mainmenu with diferent style?
please tell me how can i create mainmenu with any fonts wich i wont and how can i create mainmenu with diferent style?

CREATE SEQUENCE - ошибка синтаксиса в "CREATE"
Выполняю некоторое задание по вузу, в ERBuilder создаются таблицы, связи между ними задаются, добавляются последовательности(или триггеры),...

Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел
Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел

В строке заменить пробел между слов на запятую и пробел
В строке заменить пробел между слов на запятую и пробел

Заменить неразрывный пробел NBSP на обычный пробел в файле
здравствуйте написал скрипт: with open('russianSpeaking.js', 'r', encoding='utf-8') as f: # чтение из файла f_text = f.read() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
160
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru