![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Class function/procedure [D6]
Новичек © (2004-06-22 16:05:00)что такое subj?
и как это использовать?
спасибо за внимание!
Sandman25 (2004-06-23 11:22:00) [1][22] Новичек (23.06.04 11:21)
Перечитайте [9] Amoeba © (22.06.04 17:12). Еще много чего интересного узнаете :)
Новичек (2004-06-23 11:21:00) [2]очччень интересно! теперь буду знать...
Игорь Шевченко (2004-06-23 11:15:00) [3]Тимохов © (23.06.04 11:04)
Еще для укрепления:
"Динамические полезны когда базовый класс объявляет много перекрываемых методов, которые будут унаследованы множеством потомков, но только иногда будут перекрыты"
С уважением,
Anatoly Podgoretsky (2004-06-23 11:07:00) [4]Amoeba © (22.06.04 16:13) [1]
К свойствам можно обращаться, если они не тянут за собой обращения к полям.
Например:
property CurentTime: TTime read Time;
Тимохов (2004-06-23 11:04:00) [5]всего то? :)))
тогда я знаю разницу virtual и dynamic :)))
спасибо, Игорь. Вы укрепили мою уверенность в моих же познаниях :))
Игорь Шевченко (2004-06-23 11:01:00) [6]
> но детали не помню
"Разница между динамическими и виртуальными методами состоит в том, что таблица динамических методов DMT содержит адреса только тех методов, которые объявлены как dynamic в данном классе, в то время как таблица VMT содержит адреса виртуальных методов не только данного класса, но и всех его родителей. Значительно большая по размеру таблица VMT обеспечивает более быстрый поиск, в то время как при обращении к динамическому методу программа сначала просматривает таблицу DMT у объекта, затем у его родительского класса и так далее, пока не будет найдена нужная точка входа. "
Тимохов (2004-06-23 10:51:00) [7]
> Динамические методы не могут быть методами доступа свойств
да это я знаю.
про одинаковость поведения и разность реализации тоже.
но детали не помню, т.к. к моему делу не относятся :))
jack128 (2004-06-22 21:44:00) [8]
> Arnold © (22.06.04 21:27)
про статические переменные я так понял имеется в виду, что то а ля
class CComPort
{
public:
static int m_static;
};
нет, нельзя. только то, что предложил > Тимохов © (22.06.04 18:09)
> честно говоря разницу между дин и вирт методами я и сам
> плохо помню - когда то понял, что для моих задач разницы
> нет и за был.
их поведение абсолютно одинаково. разница в реализации этого поведения. А для твоих задач, если ты используешь ООП(а значит объекты) разница есть ;-) Динамические методы не могут быть методами доступа свойств
Arnold (2004-06-22 21:27:00) [9]чёт я непонял. Статические то переменные в сях (static) это те которые живут до тех пока прога не деструкнется. А принадлежат они классу или какой либо функции это вродь без разницы.
Amoeba (2004-06-22 18:16:00) [10]
> Только последние версии требуют опции {$J+}
Эта опция установлена по умолчанию.
Amoeba (2004-06-22 18:09:00) [11]
> GrayFace © (22.06.04 18:05) [10]
Это что, шутка?
PVOzerski (2004-06-22 18:09:00) [12]>А как в Delphi делать статические переменные?
Если я правильно понял, о чем речь, использовать типизированные константы. Только последние версии требуют опции {$J+}
Тимохов (2004-06-22 18:09:00) [13]
> GrayFace © (22.06.04 18:05) [10]
я так понимаю под статическими вы понимаете то, как это понимается в сях, т.е. принадлежащие классу. Так?
Если да, то ответ:
никак. Можно делать эмуляцию
class function GetClassVar: Integer;
class procedure SetClassVar(...)
implementation
var
classvar: integer;
class function tmyclass.getclassvar: integer
begin
result := classvar;
end;
и т.д.
GrayFace (2004-06-22 18:05:00) [14]Удалено модератором
Примечание: Любишь задавать вопросы в чужих ветках, а тебя никто не ограничивает создать свою
Amoeba (2004-06-22 17:12:00) [15]
> а в хелпе как-то сжато написано
Тебе уже посоветовали почитать литературу.
Новичек (2004-06-22 16:56:00) [16]соорри! проглядел!
а спросил я про сабж... потому, что его еще ни разу не использовал... а в хелпе как-то сжато написано)))
всем бальшой спасибо! буду дальше разбираться!
PVOzerski (2004-06-22 16:46:00) [17]Уж что-то одно: либо abstract, либо begin ... end;
Тимохов (2004-06-22 16:41:00) [18]
>
> я правильно усе написал?
лучший ответ - проверка!
проверь - все станет ясно.
ЗЫ с первого взгляда все ок. кроме того, что под implemention virtual; abstract; надо убрать.
Новичек (2004-06-22 16:38:00) [19]ну про виртуальные и статические я вроде понимать!
типа:
TMyClass = class;
procedyre MyProc; virtual;
end;
TMyClass2 = class(TMyClass)
procedure MyProc; override;
end;
...
а с классовыми типа можно сделать так:
TMyEnum = (enElem1, enElem2, enElem3);
TMyBaseClass = class
class function GetType: TMyEnum; virtual; abstract;
end
TMyClass1 = class(TMyBaseClass)
class function GetType: TMyEnum; override;
end;
TMyClass2 = class(TMyBaseClass)
class function GetType: TMyEnum; override;
end;
TMyClass3 = class(TMyBaseClass)
class function GetType: TMyEnum; override;
end;
...
implementation
...
class function TMyClass1.GetType: TMyEnum; virtual; abstract;
begin
result := enElem1;
end;
...
class function TMyClass2.GetType: TMyEnum; virtual; abstract;
begin
result := enElem2;
end;
...
class function TMyClass3.GetType: TMyEnum; virtual; abstract;
begin
result := enElem3;
end;
я правильно усе написал?
Тимохов (2004-06-22 16:24:00) [20]честно говоря разницу между дин и вирт методами я и сам плохо помню - когда то понял, что для моих задач разницы нет и за был.
а то, что классовые методы бывают виртуальные это здорово.
у меня на этом принципе вся библиотека написана.