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

> Прочтите прежде чем задавать вопрос!

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

> Массив разнотипных объектов, ООП
sheka
сообщение 23.02.2011 12:31
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

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


Реализовать многоразовый вывод разных картинок на экран.
Я думаю это сделать с помощью ООП: сделать массив разнотипных объектов и потом просто вызывать отрисовку.
Заголовок (Показать/Скрыть)

Тут проблемы:
1. При присваивании родителю наследника некоторые поля откидываются, т. е. это не будут полноценные объекты.
2. Сreate все таки вне цикла
3. Если делать не динамическими переменными почему-то writeln('s = ',s); строку s не выводит
4. Одним местом чувствую, что с памятью что-то не то, т. к. учитывая, что идет подгонка под родителя, то почему-то памяти выделяется как под наследника.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 23.02.2011 20:40
Сообщение #2


Гость






Во-первых, есть перегрузка функций (я про конструктор), во-вторых - значения по умолчанию. Совмещаем и получаем:

ULine.pas
{$mode objfpc}
unit ULine;

interface

uses
UBase;

type
TPoint = record
x, y: integer;
end;

PTLine = ^TLine;
TLine = object(TBase)
// ...
public
constructor Create(iColor:byte;
iLineType, iLineWidth: word; x1, y1, x2, y2: integer);
constructor Create(FileName: string; iColor: byte = 0);
destructor Destroy;
end;

implementation

uses
Graph;

constructor TLine.Create(iColor:byte;
iLineType, iLineWidth: word; x1, y1, x2, y2: integer);
begin
inherited Create('', iColor);
LineType := iLineType;
pb.x := x1;
pb.y := y1;
pe.x := x2;
pe.y := y2;
end;

constructor TLine.Create(FileName: string; iColor: byte);
begin
inherited Create(FileName, iColor);
end;

// ...
end.
, то же самое делаешь для UCircle.pas, и потом вызываешь:

  InitGraph(gd,gm,'');
arr[1] := new(PTLine, Create('Line1.txt'));
arr[2] := new(PTLine, Create(9,3,3,100,500,800,100));
arr[3] := new(PTCircle, Create('Circle1.txt'));
for i := 1 to n do
arr[i]^.Show;
 К началу страницы 
+ Ответить 

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


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

 



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