![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Class u Object [D5]
Random © (2002-05-29 12:58:00)В чем разница? Объявляю объект
TTree = object
public
fTop:PTop;
...
Все работает. Заменяю object на class - выдает Access Vialation на строчке
If fTop = nil then ...
Так в чем же разница?
Alx2 (2002-05-30 10:16:00) [1]Сорри, не пользовался ими со времен BP7.0 :)
NailS (2002-05-29 15:59:00) [2]Since object types do not descend from TObject, they provide no built-in constructors, destructors, or other methods. You can create instances of an object type using the New procedure and destroy them with the Dispose procedure, or you can simply declare variables of an object type, just as you would with records.
Object types are supported for backward compatibility only. Their use is not recommended.
Alx2 (2002-05-29 15:52:00) [3]>Для object нет Create, Destroy
Конструктор и деструктор в object можно хоть горшком обозвать :)
А New и Dispose - для ссылок на объекты. У него объект объявлен статикой. Поэтому просто <ObjectName>.<ConstrucorName>(<parameters>)
NailS (2002-05-29 15:37:00) [4]Для object нет Create, Destroy и создаются они при помощи New, Dispose, ну а сравнивать с nil лучше поинтер на object
Lord Warlock (2002-05-29 15:36:00) [5]
> По-моему для типов, объявленный с помощью спецификатора
> "object" это не проходит.
человек хочет класс, я написал для класса
Alx2 (2002-05-29 15:28:00) [6]>TreeObj:=TTree.Create; //TreeObj - переменная типа TTree
По-моему для типов, объявленный с помощью спецификатора "object" это не проходит. Там нет методов класса. Для них ИМХО нужно писать TreeObj.Create(...). И сравнение if TreeObj=Nil не совсем корректно :)
Anatoly Podgoretsky (2002-05-29 15:03:00) [7]Ну даже если ничего и не знаешь, то надо хотя бы приводить более полное описание и пример его использования, с данным объемом тебе можно сказать, только то, что у тебя где то ошибка
Lord Warlock (2002-05-29 14:52:00) [8]если в программе нет такой строчки:
TreeObj:=TTree.Create; //TreeObj - переменная типа TTree
ничего работать не будет
и еще желательно вызывать TreeObj.Free; по завершении пользования этим объектом.
А вообще-то это основы ООП, надо знать.
Alx2 (2002-05-29 14:44:00) [9]>Random (29.05.02 13:36)
Я спрашивал как именно создаешь. Как описываешь (у тебя приведена именно часть описания) - пока пофигу :)
NailS (2002-05-29 14:14:00) [10]Сорри, описался малость:
не TObject а object.
NailS (2002-05-29 13:54:00) [11]2 Random
Дык, молодой человек, вы похоже экземпляр класса не создаете ;) и хотите получить доступ к его членам, так у вас не выйдет и Access Violation тому свидетель.
То что у вас прокатывало данное поведение с TObject связано с тем что TObject это (упрощенно говоря) структура (запись) с функциями, насколько я помню.
Random (2002-05-29 13:36:00) [12]Я ж писал в начале
TTree = object
public
fTop:PTop;
...
Работает, а потом слово object заменяю на слово class и ...
Или ты про другое? Далее никак его не создаю, есть лишь конструктор create который заполняет объект записями из файла.
Alx2 (2002-05-29 13:31:00) [13]Как создаешь объект?
Random (2002-05-29 13:24:00) [14]Я ж говорю, код один и тот же, но при замене обжекта на класс появляется ошибка. Да и вообще откуда может быть ошибка на такой строке? Я ж указателю не присваиваю нечего ...
MBo (2002-05-29 13:03:00) [15]про разницу см. хелп.
а Access Vialation - наверно, не создал экземпляр