Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2012, 16:28   #1
Александр Павлович
Пользователь
 
Аватар для Александр Павлович
 
Регистрация: 25.11.2012
Сообщений: 13
По умолчанию Возможно ли объявление типа в interface, описание - в implementation

Возможно ли что-то в таком духе:
Код:
unit U1;
interface
type myStackOfInt; // как бы "forward"

procedure push ( x:myStackOfInt; n:integer);
function pop ( x:myStackOfInt) : integer;

implementation

 // как-то определяю тип и процедуры
...............
end.
Цель - имитировать ООП процедурными средствами. Запретить работать непосредственно с данными.
Заранее спасибо.
С глубоким уважением,
Александр

Последний раз редактировалось Александр Павлович; 30.11.2012 в 17:25.
Александр Павлович вне форума Ответить с цитированием
Старый 30.11.2012, 17:43   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
unit StackUnit;

interface

function CreateStack:pointer;
procedure FreeStack(Stack:pointer);
procedure push (Stack:pointer; n:integer);
function pop ( Stack:pointer):integer;

implementation

type
  PStackElement=^TStackElement;
  TStackElement=record
    Value:integer;
    Prev:PStackElement;
  end;
  PStack=^TStack;
  TStack=record
    Element:PStackElement;
  end;

function CreateStack:pointer;
var Stack:PStack;
begin
  new(Stack);
  Stack.Element:=nil;
  result:=Stack;
end;

procedure FreeStack(Stack:pointer);
var E:PStackElement;
begin
  while PStack(Stack).Element<>nil do
  begin
    E:=PStack(Stack).Element;
    PStack(Stack).Element:=E.Prev;
    dispose(E);
  end;
  dispose(Stack);
end;

procedure push (Stack:pointer; n:integer);
var E:PStackElement;
begin
  new(E);
  E.Value:=n;
  E.Prev:=PStack(Stack).Element;
  PStack(Stack).Element:=E;
end;

function pop (Stack:pointer):integer;
var E:PStackElement;
begin
  E:=PStack(Stack).Element;
  PStack(Stack).Element:=E.Prev;
  result:=E.Value;
  dispose(E);
end;

end.
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 30.11.2012, 17:46   #3
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var s:pointer;
i:integer;
begin
  s:=CreateStack;
  for i:=1 to 10 do
    push(s,i);

  for i:=1 to 10 do
    memo1.lines.add(IntToStr(pop(s)));

  for i:=1 to 10 do
    push(s,i);

  FreeStack(s);
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 03.12.2012, 06:53   #4
Александр Павлович
Пользователь
 
Аватар для Александр Павлович
 
Регистрация: 25.11.2012
Сообщений: 13
По умолчанию

Спасиба!
Я понял. Всё можно, но без контроля типа.
С глубоким уважением,
Александр
Александр Павлович вне форума Ответить с цитированием
Старый 03.12.2012, 07:11   #5
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

контролем типа занимается только unit StackUnit тут создание тут и убийство
тоже самое что windows занимается контролем типа THandle, что за THandle скрывается сокет, пайп или файл определяет сама винда
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тип запись. Объявление типа запись. Маленыч Паскаль, Turbo Pascal, PascalABC.NET 1 11.05.2012 20:42
Объявление типа Sergey S Общие вопросы C/C++ 2 02.02.2012 13:48
Возможно ли в массив типа char записать первым элементом значение переменной типа float? Green Gin Общие вопросы C/C++ 2 05.12.2011 01:50
Объявление 32-х битного типа не удается. Alex Cones Паскаль, Turbo Pascal, PascalABC.NET 18 16.02.2010 00:12
описание записи с именем типа Systema CaJIuCT Помощь студентам 1 10.12.2009 01:47