static-член

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

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

Ответить
compiler
новенький
Сообщения: 39
Зарегистрирован: 20.02.2007 12:49:12

static-член

Сообщение compiler »

если не тяжело, покажите подалуйста простейший пример с использованием static-члена.
заранее благодарен
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

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

ЗЫ пятница все-таки
[/офтоп]
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

А мне вот тоже интересно, вроде 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 нет нормального статика (в том виде как в С++), под статиком понимается обычный невиртуальный/нединамический метод...
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

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

Only class methods can be referred with class referrences

номальным языком сказано же - необходимо использовать дерективу class - она позволяет вызывать метод объекта без создания самого объекта
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Сказано, то сказано,
но это будет не статик-функция (как С++), а класс-функция - отличие в одном неявно передаваемом параметре 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.
compiler
новенький
Сообщения: 39
Зарегистрирован: 20.02.2007 12:49:12

Сообщение compiler »

shade писал(а): а в руководстве о нем не слова.
есть о дерективе {$STATIC ON} :), но не много... вроде бы уже разобрался, всем спасибо.
Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

Сообщение Replicator »

А разве любая функция, в которой не используется self (явно или неявно) не может быть вызвана, как статическая?
Ответить