Классы в Паскале
Сконструировать новый класс, соответствующий фигуре "Три точки", в котором обязательно реализованы следующие методы: рисование фигуры на экране, стирание фигуры с экрана, перемещение фигуры на вектор. Продемонстрировать применение класса с помощью программы
Саму программу я сделаю просто Turbo Pascal не видит ключевого слова class Т е хначит не поддерживает ООП а зачада стоит сделать на паскале т е это препод ошибся или есть какой нить паскаль с поддержкой ООП скачал:
TMT Pascal и Borland Pascal та же фишка кто сзнает че делать)
В Turbo Pascal используется ключевое слово object, по результату очень похожее на record.
[highlight=pascal]type
PMyClass = ^TMyClass;
TMyClass = object
constructor Init;
end;
{...}
var
R : TMyClass;
S : PMyClass;
begin
R.Init;
New(S, Init);
end;
[/highlight]
а по моему разница достаточно большая. object - экземпляр класса (хотя может в паскале по другому совсем? я то дельфист), который содержит как переменные, константы, так и методы и пр. ерунду. а record - просто структурированная запись, содержащая различные данные.
я приложил файл вот код на всякий случай:
uses crt, graph;
type
Point = record
x, y:integer;
end;
cl = object
Private
p1, p2, p3:point;
Color : Word;
Public
Procedure Init(x1, x2, y1, y2, z1, z2:integer);
Procedure Draw(aColor:Word);
Procedure Hide;
Procedure Move(dX, dY, dZ:integer);
end;
Procedure cl.Init(x1, x2, y1, y2, z1, z2:integer);
begin
p1.x := x1;
p1.y := x2;
p2.x := y1;
p2.y := y2;
p3.x := z1;
p3.y := z2;
Color := 5;
end;
Procedure cl.Draw(aColor:word);
begin
SetColor(aColor);
Line(p1.x, p1.y, p2.x, p2.y);
Line(p1.x, p1.y, p3.x, p3.y);
Line(p2.x, p2.y, p3.x, p3.y);
end;
Procedure cl.Hide;
begin
Draw(GetBkColor);
end;
Procedure cl.Move(dX, dY, dZ:integer);
begin
Hide;
p1.x:= p1.x+dX;
p2.x:= p2.x+dY;
p3.x:= p3.x+dZ;
Draw(Color);
end;
var Pnt:cl; x1, x2, y1, y2, z1, z2, grDriver, grMode, ErrCode, m : Integer; c:char;
begin
Writeln('Enter 1st point');
ReadLn(x1, x2);
Writeln('Enter 2st point');
ReadLn(y1, y2);
Writeln('Enter 2st point');
ReadLn(z1, z2);
Pnt.Init(x1, x2, y1, y2, z1, z2);
grDriver := Detect;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode = grOk then
begin { Do graphics }
Pnt.Draw(5);
while (m<>27)do
begin
C := Readkey;
m := Ord(c);
Pnt.Move(5, 5, 5);
end;
CloseGraph;
end
else
Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
Все я разобрался все работает попдправил немного, если никто не против тему можно закрывать....
Я имел в виду, что object — это объект, занимающий место. Если объявить переменную типа TMyClass, она будет занимать место, которое нужно под экземпляр TMyClass. Собственно, это и будет экземпляр. Если нужен указатель, его нужно сделать руками. Во многом это напоминает работу с record и совсем непохоже на class в Delphi.
ровно 4 байта. Если нужно выделить память под экземпляр TMyClass, то нужно вызвать конструктор (руками), и те 4 байта уже будут указывать на выделенную область памяти. Так что класс это не запись, а скорее указатель на запись.
Конечно если паскаль не 32-х разрядный, размер указателя будет не 4 байта.
Конечно если паскаль не 32-х разрядный, размер указателя будет не 4 байта.
ВОПРОС БЫЛ НЕ ПРО Delphi!!!
хех, и правда не знал... интересно нафига оно? городят че то огород =))
Это для поддержки возможностей CLR. Возможности record подтянули до функционала struct в C# (типичный value-type). Именно 2006ой Делфи стал компилироваться в CLR 1.1.