Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отличие class от object


Frozzen ©   (2004-11-05 16:59:00) 

Объясните пожайлусто без приколов чем отличие объявления class от object


Frozzen   (2004-11-05 19:17:00) [1]

Спасибо за толковый ответ PVOzerski


PVOzerski   (2004-11-05 19:15:00) [2]

Классы появились в Delphi, до этого в TP были только объекты. Классы, в отличие от объектов, подразумевают динамическое выделение памяти под каждый экземпляр, что происходит при вызове конструктора (синтаксис этого вызова очень похож на синтаксис вызова функции, в то время как у объектов конструктор - процедура). При этом именно у классов есть набор предопределенных в tObject методов, допускаются виртуальные конструкторы, published-свойства и связь с COM-интерфейсами. Кроме того, именно для классов возможно использование метаклассов для динамического выбора типа порождаемых экземпляров. В целом, Borland рекомендует использовать именно классы. Хотя с точки зрения оптимизации (точнее, удаления "мертвого" кода) объекты тоже имеют ряд преимуществ - см. проект KOL.


Гаврила   (2004-11-05 17:59:00) [3]

под Object память выделяется сразу.
Если переменная типа Object объявлена как локальная, она целиком помещается в стек, то есть не указатель ,а весь объект.
При передаче Object параметром в функцию если не указана директива var или const, также происходит полное копирование в стек содержимого объекта.

А что лучше - ну так однозначный ответ

> ИМХО, object оставили для обратной совместимости с ТР. :-)


jack128   (2004-11-05 17:43:00) [4]

Frozzen   (05.11.04 17:25) [6]
т.е. лучше пользовать object

это откуда ты такой вывод сделал???


Frozzen   (2004-11-05 17:25:00) [5]

т.е. лучше пользовать object


begin...end   (2004-11-05 17:14:00) [6]

Или имеется в виду различие между

TMyObject = class

и

TMyObject = object

?

ИМХО, object оставили для обратной совместимости с ТР. :-)


KSergey   (2004-11-05 17:13:00) [7]

Ой, я походу все ровно перепутал... наибарот, так сказать...


Pentium133   (2004-11-05 17:12:00) [8]


> KSergey ©   (05.11.04 17:07) [1]

Скорее наоборот!


begin...end   (2004-11-05 17:10:00) [9]

Help:

If the declaration of a class type doesn't specify an ancestor, the class inherits directly from TObject. Thus

type TMyClass = class
...
end;

is equivalentto

type TMyClass = class(TObject)
...
end;

The latter form is recommended for readability.


KSergey   (2004-11-05 17:07:00) [10]

Рискну, хотя не уверен. Ну да поправляльщики, как правило, быстро находятся. Что и к лучшему ;)

object- наследник TObject, что подразумевает включение многих методов уже. А так же особенностей поведения.

class- а нифига в нем нет, как я понимаю. С чистого листа ;) Если не вру - он даже память сам под себя выделять даже не умеет (MakeInstance в TObject). Да и вообще оставлен лишь для совместимости. Не рекомендуется для использования, хотя есть ребята, которые его активно юзают (KOL)


Наверх

Титульная страница Поиск, карта сайта Написать письмо