Доброго времени суток, уважаемые программисты.
Исходная программа:
program primer_2_3; uses crt; type Stroka=object Xt, Yt: integer; Text: string; procedure Init(aXt, aYt:integer; aText: string); procedure Print; end; procedure Stroka.Init; begin Xt:=aXt; Yt:=aYt; Text:=aText; end; procedure Stroka.Print; begin GotoXY(Xt,Yt); writeln(Text); end; type StrInWin=object X1,Y1,X2,Y2,Color: integer; Str: Stroka; procedure Init(aX1,aY1,aX2,aY2,aColor:integer; aStr: Stroka); procedure MakeWin; end; procedure StrInWin.Init; begin X1:=aX1; Y1:=aY1; X2:=aX2; Y2:=aY2; Color:=aColor; Str:=aStr; end; procedure StrInWin.MakeWin; begin Window(X1,Y1,X2,Y2); TextBackGround(Color); clrScr; end; var ObWin: StrInWin; ObStr: Stroka; Begin ObStr.Init(1,1,'soobsenie'); ObWin.Init(8,4,32,20,4,ObStr); ObWin.MakeWin; ObWin.Str.Print; End.
Она выводит цветную строку в цветном окне.
Задание:
Преобразовать класс Stroka в класс Stroka1 так, чтобы он мог выводить несколько цветных строк (ввести новые поля и переопределить методы).
Вот моя робкая попытка это сделать:
program primer_2_3; uses crt; type Stroka=object Xt, Yt: integer; Text: string; procedure Init(aXt, aYt:integer; aText: string); procedure Print; end; procedure Stroka.Init; begin Xt:=aXt; Yt:=aYt; Text:=aText; end; procedure Stroka.Print; begin GotoXY(Xt,Yt); writeln(Text); end; type Stroka1=object N: integer; procedure Init(aXt, aYt:integer; aText: string; aN: integer); procedure Print; end; procedure Stroka1.Init; begin Stroka1.Init(aXt,aYt,aText,aN); N:=aN; end; procedure Stroka1.Print; var i: integer; begin for i:=1 to N do Stroka.Print; end; type StrInWin=object X1,Y1,X2,Y2,Color: integer; Str: Stroka1; procedure Init(aX1,aY1,aX2,aY2,aColor:integer; aStr: Stroka1); procedure MakeWin; end; procedure StrInWin.Init; begin X1:=aX1; Y1:=aY1; X2:=aX2; Y2:=aY2; Color:=aColor; Str:=aStr; end; procedure StrInWin.MakeWin; begin Window(X1,Y1,X2,Y2); TextBackGround(Color); clrScr; end; var ObWin: StrInWin; ObStr: Stroka1; Begin ObStr.Init(1,1,'soobsenie',5); ObWin.Init(8,4,32,20,4,ObStr); ObWin.MakeWin; ObWin.Str.Print; End.
Но Паскаль выдает ошибку "Invalid procedure or function reference" и подсвечивает строчку выделенную жирным подчеркнутым шрифтом в следующем фрагменте:
procedure Stroka1.Print;
var
i: integer;
begin
for i:=1 to N do
begin
Stroka.Print;
end;
end;
Что я делаю не так?
З.Ы.: ну и чтобы вы повеселились - это задача по объектнно-ориентированному программированию 2 курс университета.