![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
klem4 |
![]()
Сообщение
#1
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Есть примерно такая вещь :
type
TOPoint = object
x,y : word;
constructor Init(a,b,c,d : word);
procedure Show; virtual;
Destructor Done;
end;
TOLine = object(TOPoint)
x1,y1 : word;
constructor Init(a,b,c,d : word);
procedure Show; virtual;
destructor Done;
end;
constructor TOPoint.Init(a,b,c,d : word);
begin
x := a;
y := b;
end;
destructor TOPoint.Done;
begin
end;
procedure TOPoint.Show;
begin
PutPixel(x,y,13);
end;
constructor TOLine.Init(a,b,c,d : word);
begin
x := a;
y := b;
x1 := c;
y1 := d;
end;
destructor TOLine.Done;
begin
end;
procedure TOLine.Show;
begin
Line(x,y,x1,y1);
end;
Так вот можно ли что-то поменять для того, чтобы написанная процедура Work с входным параметром - переменной типа родительского объекта (в данном случае TOPoint) принимала и переменную P : TOPoint и переменную L : TOLine; и выполняля для них соответствующие методы Show ... ? Сообщение отредактировано: klem4 - 7.02.2006 11:48 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
klem4,
нет, так не пойдет !!! СНАЧАЛА инициализируешь объект, а ПОТОМ его передаешь... Иначе нельзя... Вернее, можно, но с динамическими объектами... Кстати, еще одно... Вот так будет лучше: type
TOPoint = object
x, y: word;
constructor Init(a,b: word);
destructor Done;
procedure Show; virtual;
end;
TOLine = object(TOPoint)
x1, y1: word;
constructor Init(a,b,c,d : word);
destructor Done;
procedure Show; virtual;
end;
constructor TOPoint.Init(a,b: word);
begin
x := a;
y := b;
end;
destructor TOPoint.Done;
begin end;
procedure TOPoint.Show;
begin
writeln('topoint')
end;
constructor TOLine.Init(a, b : word);
begin
Inherited Init(a, b); // Вызываешь конструктор предка ...
x1 := c;
y1 := d;
end;
destructor TOLine.Done;
begin
Inherited Done // ... и деструктор предка
end;
procedure TOLine.Show;
begin
writeln('toline');
end;
Procedure Work(var Obj: TOPoint);
Begin
obj.show;
end;
Var
my_point: TOPoint;
my_line: TOline;
begin
my_point.init(1, 2);
my_line.init(3, 4, 5, 6);
work(my_point);
work(my_line);
end.
Зачем передавать ненужные параметры в TOPoint.Init ? Сообщение отредактировано: volvo - 7.02.2006 12:25 |
![]() ![]() |
![]() |
Текстовая версия | 7.08.2025 4:09 |