static-член

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

static-член

Сообщение compiler » 06.07.2007 20:48:19

если не тяжело, покажите подалуйста простейший пример с использованием static-члена.
заранее благодарен
compiler
новенький
 
Сообщения: 39
Зарегистрирован: 20.02.2007 13:49:12

Сообщение Attid » 06.07.2007 22:54:57

[офтоп]
ну вот парнуху уже обсуждают на любимом форуме, дожились.

ЗЫ пятница все-таки
[/офтоп]
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение shade » 07.07.2007 00:16:35

А мне вот тоже интересно, вроде fpc поддерживает статик, а в руководстве о нем не слова.

метод тыка не принес результата:
Код: Выделить всё
type
  t = class
    procedure sayhello; static;
  end;

procedure t.sayhello;
begin
  writeln('hello world');
end;

begin
  t.sayhello;
end.

спотыкается на t.sayhello;
Only class methods can be referred with class referrences

Сдается мне, что в fpc нет нормального статика (в том виде как в С++), под статиком понимается обычный невиртуальный/нединамический метод...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение alexs » 07.07.2007 03:15:02

shade писал(а):спотыкается на t.sayhello;

Only class methods can be referred with class referrences

номальным языком сказано же - необходимо использовать дерективу class - она позволяет вызывать метод объекта без создания самого объекта
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение shade » 07.07.2007 19:00:25

Сказано, то сказано,
но это будет не статик-функция (как С++), а класс-функция - отличие в одном неявно передаваемом параметре Self:

Код: Выделить всё
{$mode objfpc}

type
  fooclass = class of foo;
 
  foo = class
    public
      class procedure sayhello; virtual;
  end;
 
  bar = class (foo)
  end;
 
  banana = class (bar)
    public
      class procedure sayhello; override;
  end;

class procedure foo.sayhello;
begin
  writeln(Self.ClassName, ' says hello');
end;

class procedure banana.sayhello;
begin
  writeln(Self.ClassName, ' does not says hello');
end;

procedure hello(AClass: fooclass);
begin
  AClass.sayhello;
end;

begin
  hello(foo);
  hello(bar);
  hello(banana);
end.
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение compiler » 07.07.2007 19:56:28

shade писал(а): а в руководстве о нем не слова.
есть о дерективе {$STATIC ON} :), но не много... вроде бы уже разобрался, всем спасибо.
compiler
новенький
 
Сообщения: 39
Зарегистрирован: 20.02.2007 13:49:12

Сообщение Replicator » 14.07.2007 20:42:09

А разве любая функция, в которой не используется self (явно или неявно) не может быть вызвана, как статическая?
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru