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

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

Class function/procedure [D6]


Страницы:   1 2

Новичек ©   (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]

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

а то, что классовые методы бывают виртуальные это здорово.
у меня на этом принципе вся библиотека написана.


Страницы:   1 2

Наверх

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