|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.07.2010, 15:39 | #1 |
Регистрация: 09.07.2010
Сообщений: 3
|
Вопрос по классам делфи и их использованию.
Уважаемые знатоки программирования.
Подскажите по работе с классами делфи. Создаю кнопку програмно. Код:
или but2:=but2.create(form2); ЗЫЖ.: не надо писать "как надо написать", меня больше интересует вопрос "почему так, а не эдак" |
12.07.2010, 15:56 | #2 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Или по-другому - даже если у Вас есть ДНК (описание класса в type), это не означает что у Вас сразу будет стадо овечек. Необходимо их клонировать... Create этим и занимается.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 12.07.2010 в 16:12. |
|
12.07.2010, 16:12 | #3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Если ты напишешь просто but2.create не присвоив результат ничему, обьект то создастся, но он не будет привязан ни к какой переменной, не будет иметь якоря, как говаривают спецы, а следовательно для Делфи это мусор в памяти. К тому же изначально у переменная обьекта инициализируется в nil. Это 0. Ты попробуй обратится в виндоусе к ячейке памяти по номеру 0 - тебя так далеко пошлют... Поэтому нужно сначала создавать от класса экземпляр, и обязательно результат конструктора связывать с некой переменной, которая будет на него указывать. Между прочим ты можешь писать: Код:
Так что дело только в том что изначально инициализация обьектных переменных проходит в nil
I'm learning to live...
|
|
12.07.2010, 16:13 | #4 |
Пользователь
Регистрация: 24.06.2010
Сообщений: 20
|
Потому что не был создан экземпляр класса, вы не сможете через but2 вызывать методы и свойства данного класса.
but2 := tbutton.create(form2) здесь мы создаем экземпляр класса tbutton, тем самым мы через but2 можем вызывать методы и свойства tbutton. Если что то не правильно поправьте меня. Полезно будет вам почитать про архитектуру системы компонентов в делфи. А теперь мой вопрос к профи, я просто чет подзапаминовал а объект это и есть тот самый экземпляр класса?
я в жж
Последний раз редактировалось ji_ji; 12.07.2010 в 16:15. |
12.07.2010, 16:21 | #5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Я лично считаю что это одно и тоже.
I'm learning to live...
|
|
12.07.2010, 16:24 | #6 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Главный вопрос - выделение памяти под структуры класса . Это как указатели, работали с ними? Вот есть такая операция new - выделение память под структуру данных. Без нее структурой пользоваться нельзя. Ибо указатель указывает на нечто, что не соответствует данной структуре. В Create во-первых происходит выделение памяти, аналогично new, а, во-вторых, указателю присваивается адрес только что созданной структуры. В принципе, при желании, можно самому сделать некоторое подобие класса, но это уже только если интересно.
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
12.07.2010, 19:16 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
надо делать именно TButton.Create
потому что как бы то не было, конструктор получает параметр, этот параметр это указатель на VMT того класса который <>.Create. так как переопределение и вирт методы используются повсеместно, то надо делать так. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по использованию randomizer в паскале | Kati | Помощь студентам | 1 | 08.03.2010 23:48 |
Вопрос по использованию Worksheet? | Vadim_abs | Microsoft Office Excel | 8 | 11.11.2009 11:54 |
Вопрос по использованию SQLite в delphi | ROFF | Помощь студентам | 1 | 06.05.2009 09:26 |
Вопрос по использованию OLE | yngwie | Общие вопросы C/C++ | 0 | 19.03.2009 00:56 |
вопрос по использованию конструкции if | zetrix | Microsoft Office Excel | 0 | 31.10.2006 07:52 |