Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Class function/procedure   Найти похожие ветки 

 
Новичек   (2004-06-22 16:05) [0]

что такое subj?
и как это использовать?
спасибо за внимание!


 
Amoeba ©   (2004-06-22 16:13) [1]

Эта ф-я/процедура может вызываться без создания экземпляра класса. Естественно, при этом в ней не может быть обращения к полям/св-вам класса. Для лучшего понимания читай литературу. Большой выбор таковой в эл. виде найдешь на сайте А.Подгорецкого: http://www.podgoretsky.com/lang.html


 
Тимохов ©   (2004-06-22 16:16) [2]

а еще они бывают виртуальные.


 
Amoeba ©   (2004-06-22 16:20) [3]


> Тимохов ©   (22.06.04 16:16) [2]

Интересно, знает ли автор вопроса разницу между виртуальными (а также динамическим) и статическими методами?


 
Тимохов ©   (2004-06-22 16:24) [4]

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

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


 
Новичек   (2004-06-22 16:38) [5]

ну про виртуальные и статические я вроде понимать!
типа:

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:41) [6]


>
> я правильно усе написал?

лучший ответ - проверка!
проверь - все станет ясно.

ЗЫ с первого взгляда все ок. кроме того, что под implemention virtual; abstract; надо убрать.


 
PVOzerski ©   (2004-06-22 16:46) [7]

Уж что-то одно: либо abstract, либо begin ... end;


 
Новичек   (2004-06-22 16:56) [8]

соорри! проглядел!
а спросил я про сабж... потому, что его еще ни разу не использовал... а в хелпе как-то сжато написано)))
всем бальшой спасибо! буду дальше разбираться!


 
Amoeba ©   (2004-06-22 17:12) [9]


> а в хелпе как-то сжато написано

Тебе уже посоветовали почитать литературу.


 
GrayFace ©   (2004-06-22 18:05) [10]

Удалено модератором
Примечание: Любишь задавать вопросы в чужих ветках, а тебя никто не ограничивает создать свою


 
Тимохов ©   (2004-06-22 18:09) [11]


> 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;


и т.д.


 
Amoeba ©   (2004-06-22 18:09) [12]


> GrayFace ©   (22.06.04 18:05) [10]

Это что, шутка?


 
PVOzerski ©   (2004-06-22 18:09) [13]

>А как в Delphi делать статические переменные?
Если я правильно понял, о чем речь, использовать типизированные константы. Только последние версии требуют опции {$J+}


 
Amoeba ©   (2004-06-22 18:16) [14]


> Только последние версии требуют опции {$J+}

Эта опция установлена по умолчанию.


 
Arnold ©   (2004-06-22 21:27) [15]

чёт я непонял. Статические то переменные в сях (static) это те которые живут до тех пока прога не деструкнется. А принадлежат они классу или какой либо функции это вродь без разницы.


 
jack128 ©   (2004-06-22 21:44) [16]


> Arnold ©   (22.06.04 21:27)


про статические переменные я так понял имеется в виду, что то а ля

class CComPort  
{
public:
  static int m_static;
};

нет, нельзя. только то, что предложил > Тимохов ©   (22.06.04 18:09)

> честно говоря разницу между дин и вирт методами я и сам
> плохо помню - когда то понял, что для моих задач разницы
> нет и за был.
их поведение абсолютно одинаково. разница в реализации этого поведения.  А для твоих задач, если ты используешь ООП(а значит объекты) разница есть ;-) Динамические методы не могут быть методами доступа свойств


 
Тимохов ©   (2004-06-23 10:51) [17]


>  Динамические методы не могут быть методами доступа свойств

да это я знаю.
про одинаковость поведения и разность реализации тоже.

но детали не помню, т.к. к моему делу не относятся :))


 
Игорь Шевченко ©   (2004-06-23 11:01) [18]


> но детали не помню


"Разница между динамическими и виртуальными методами состоит в том, что таблица динамических методов DMT содержит адреса только тех методов, которые объявлены как dynamic в данном классе, в то время как таблица VMT содержит адреса виртуальных методов не только данного класса, но и всех его родителей. Значительно большая по размеру таблица VMT обеспечивает более быстрый поиск, в то время как при обращении к динамическому методу программа сначала просматривает таблицу DMT у объекта, затем у его родительского класса и так далее, пока не будет найдена нужная точка входа. "


 
Тимохов ©   (2004-06-23 11:04) [19]

всего то? :)))
тогда я знаю разницу virtual и dynamic :)))

спасибо, Игорь. Вы укрепили мою уверенность в моих же познаниях :))


 
Anatoly Podgoretsky ©   (2004-06-23 11:07) [20]

Amoeba ©   (22.06.04 16:13) [1]
К свойствам можно обращаться, если они не тянут за собой обращения к полям.
Например:

property CurentTime: TTime read Time;


 
Игорь Шевченко ©   (2004-06-23 11:15) [21]

Тимохов ©   (23.06.04 11:04)

Еще для укрепления:

"Динамические полезны когда базовый класс объявляет много перекрываемых методов, которые будут унаследованы множеством потомков, но только иногда будут перекрыты"

С уважением,


 
Новичек   (2004-06-23 11:21) [22]

очччень интересно! теперь буду знать...


 
Sandman25 ©   (2004-06-23 11:22) [23]

[22] Новичек   (23.06.04 11:21)

Перечитайте [9] Amoeba ©   (22.06.04 17:12). Еще много чего интересного узнаете :)



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.042 c
14-1087582324
Delphi5.01
2004-06-18 22:12
2004.07.11
Vopros ne iz logkih


1-1087959119
Sirus
2004-06-23 06:51
2004.07.11
Access violation достал....


1-1088067880
JIurafdsfsdt
2004-06-24 13:04
2004.07.11
В какой тип данных сохранить содержимое RichEdit


3-1087472158
Top100
2004-06-17 15:35
2004.07.11
Изменение рамеров.


1-1088059865
Maks Realov
2004-06-24 10:51
2004.07.11
Проблема с созданием библиотеки ресурсов.