IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> ООП
klem4
сообщение 7.02.2006 11:46
Сообщение #1


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Есть примерно такая вещь :

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";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 7.02.2006 12:08
Сообщение #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
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 7.08.2025 4:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"