powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Преграды использования полиморфизма
9 сообщений из 9, страница 1 из 1
Преграды использования полиморфизма
    #39753919
фываенг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, подскажите пожалуйста
Есть базовый класс и два от него производных:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
class Food {
  massive: array of Structure_of_data; (массив, элементы которого - структура данных)
  constructor Create;
}

Food.Create {
  // [color=green]алгоритм для заполнения massive[/color]
}

class bun(Food) {
  constructor Create;  
}

class butter(Food) {
  constructor Create;
}

{ bun }

const 
  // Здесь константные массивы строк, относящиеся к bun и предназначенные для заполнения структуры данных (то есть тут данные относящиеся к этому классу, но записать их я хочу (c помощью [color=green]алгоритма в Food.Create[/color]) в поле massive)

bun.Create() {

}

{ butter }

const 
  // Здесь константные массивы строк, относящиеся к butter и предназначенные для заполнения структуры данных

butter.Create() {

}



Данные разные, но алгоритм заполнения структуры данных одинаковый (именно поэтому я и вынес его в базовый класс). И вот не понимаю я, именно как их лучше всего передать в конструктор базового класса, потому что через аргументы это тупо. Или лучше как то переделать код, вот он вопрос

В итоге я хочу создать два объекта класса bun и butter, и чтобы у объекта класса bun в поле massive были данные относящиеся к классу bun, а чтобы у объекта класса butter в поле massive были данные относящиеся к классу butter

Потому что алгоритм обработки этих данных далее тоже одинаковый
И все методы для обработки этих данных далее я хочу поместить в класс Food

Как это лучше всего сделать?
Или
Это вообще хороший способ? По правилам ли так, что данные относящиеся к производным классам, хранятся в полях базового класса?
...
Рейтинг: 0 / 0
Преграды использования полиморфизма
    #39753936
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class Food {
 massive: array of Integer;
 constructor Create(const AData: array of Integer);
}

Food.Create() {
  //обработать AData
}

Bun.Create() {
  inherited Create([1, 2, 3, 4]);
}

Butter.Create() {
  inherited Create([5, 6, 7, 8]);
}
...
Рейтинг: 0 / 0
Преграды использования полиморфизма
    #39753942
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, на Delphi теперь пишут с фигурными скобками, или это д/б в разделе по какому-то Си-языку?
...
Рейтинг: 0 / 0
Преграды использования полиморфизма
    #39753960
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BeltarА что, на Delphi теперь пишут с фигурными скобками, или это д/б в разделе по какому-то Си-языку?
Да, можно и с фигурными скобками писать, особенно если побольше блоки ими выделять. Откомпилируется без ошибок и не повредятся данные в рантайме.
...
Рейтинг: 0 / 0
Преграды использования полиморфизма
    #39754142
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock....
Откомпилируется без ошибок и не повредятся данные в рантайме.
Имеете ввиду, что меньше шансов что-либо сломать?
...
Рейтинг: 0 / 0
Преграды использования полиморфизма
    #39754154
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в общем случае, то так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
type
  TStructureOfData = record 
    Data: Integer;
  end;

  TFood = class
  protected
    FMassive: array of TStructureOfData;
    procedure InitMassive; virtual; abstract;
    procedure ProcessMassive;
  public
    constructor Create;
  end;

  TBun = class(TFood)
  protected
    procedure InitMassive; override;
  end;

  TButter = class(TFood)
  protected
    procedure InitMassive; override;
  end;

implementation

{ TFood }

constructor TFood.Create;
begin
  InitMassive;
  ProcessMassive;
end;

procedure TFood.ProcessMassive;
var
  I: Integer;
begin
  for I := 0 to High(FMassive) do
    ShowMessage(FMassive[I].A.ToString)
end;

{ TBun }

procedure TBun.InitMassive;
var
  I: Integer;
begin
  SetLength(FMassive, 10);
  for I := 0 to High(FMassive) do
    FMassive[I].A := Random(100)
end;

{ TButter }

procedure TButter.InitMassive;
var
  I: Integer;
begin
  SetLength(FMassive, 20);
  for I := 0 to High(FMassive) do
    FMassive[I].A := Random(100)
end;

end.
...
Рейтинг: 0 / 0
Преграды использования полиморфизма
    #39754155
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейдесли в общем случае, то так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
type
  TStructureOfData = record 
    Data: Integer;
  end;

  TFood = class
  protected
    FMassive: array of TStructureOfData;
    procedure InitMassive; virtual; abstract;
    procedure ProcessMassive;
  public
    constructor Create;
  end;

  TBun = class(TFood)
  protected
    procedure InitMassive; override;
  end;

  TButter = class(TFood)
  protected
    procedure InitMassive; override;
  end;

implementation

{ TFood }

constructor TFood.Create;
begin
  InitMassive;
  ProcessMassive;
end;

procedure TFood.ProcessMassive;
var
  I: Integer;
begin
  for I := 0 to High(FMassive) do
    ShowMessage(FMassive[I].A.ToString)
end;

{ TBun }

procedure TBun.InitMassive;
var
  I: Integer;
begin
  SetLength(FMassive, 10);
  for I := 0 to High(FMassive) do
    FMassive[I].A := Random(100)
end;

{ TButter }

procedure TButter.InitMassive;
var
  I: Integer;
begin
  SetLength(FMassive, 20);
  for I := 0 to High(FMassive) do
    FMassive[I].A := Random(100)
end;

end.



очепятался

Код: pascal
1.
2.
3.
4.
type
  TStructureOfData = record 
    А: Integer;
  end;
...
Рейтинг: 0 / 0
Преграды использования полиморфизма
    #39754320
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, ))))
...
Рейтинг: 0 / 0
Преграды использования полиморфизма
    #39754337
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И производительность максимальная, ведь самый быстрый код - это код, который не выполнился.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Преграды использования полиморфизма
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]