Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.032 c
1-1088003458
tria
2004-06-23 19:10
2004.07.11
Как сделать, чтобы вид окон под ХР не портился?


1-1088594179
half_litre
2004-06-30 15:16
2004.07.11
Не срабатывает OnClose. Правильно ли это ?


1-1088353420
alexa
2004-06-27 20:23
2004.07.11
Курсор ввода в Edit


1-1088067216
Lexa
2004-06-24 12:53
2004.07.11
Как программно назначить событию OnClik для меню свою процедуру?


3-1087289384
serg128
2004-06-15 12:49
2004.07.11
Как установить фильтр в TClientDataSet чтобы остались записи из 1





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский