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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Проблема с ООП, поле класса - другой класс
сообщение
Сообщение #1


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

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

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


вот есть такой пример:

класс X - очередь, каждый элемент очереди содержит помимо ссылки на следующий элемент еще поле value: Integer;

класс Y - очередь, каждый элемент очереди содержит помимо ссылки на следующий элемент еще поле value: String и поле obj_x: X;

так вот почему-то у всех элементов в очереди класса obj_y: Y, значения элементов obj_x одинаковы ... хотя заполняются разными значениями =(((

модуль

unit Unit1;

interface

type

PA = ^TA;
TA = record
value: Integer;
next: PA;
end;

X = class
private
first, last: PA;
public
constructor Create;
destructor Free;

function Empty: Boolean;

procedure Push(const value: Integer);
procedure Pop;

property Top: PA read first;
end;

PB = ^TB;
TB = record
value: String;
obj_x: X;
next: PB;
end;

Y = class
private
first, last: PB;
public
constructor Create;
destructor Free;

function Empty: Boolean;

procedure Push(const value: String);
procedure Pop;

property Top: PB read first;
end;

implementation

constructor X.Create;
begin
first := nil;
last := nil;
end;

destructor X.Free;
begin
while not Empty do Pop;
end;

procedure X.Push(const value: Integer);
var
T: PA;
begin
New(T);

T^.value := value;
T^.next := nil;

if Empty then
first := T
else
last^.next := T;

last := T;
end;

procedure X.Pop;
var
T: PA;
begin
if not Empty then begin
T := first;
first := first^.next;
dispose(T);
end;
end;

function X.Empty: Boolean;
begin
result := first = nil;
end;

{ Y }

constructor Y.Create;
begin
first := nil;
last := nil;
end;

destructor Y.Free;
begin
while not Empty do Pop;
end;

procedure Y.Push(const value: String);
var
T: PB;
n, i: Integer;
begin
New(T);

T^.value := value;
T^.obj_x := X.Create;

randomize;

n := Random(10) + 1;

for i := 1 to n do
T^.obj_x.Push(random(10));

T^.next := nil;

if Empty then
first := T
else
last^.next := T;

last := T;
end;

procedure Y.Pop;
var
T: PB;
begin
if not Empty then begin
T := first;
first := first^.next;
T^.obj_x.Free;
Dispose(T);
end;
end;

function Y.Empty: Boolean;
begin
result := first = nil;
end;

end.


тестовый пример:

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils,
Unit1 in 'Unit1.pas';

var
obj_y: Y;
begin
obj_y := Y.Create;

obj_y.Push('a');
obj_y.Push('b');
obj_y.Push('c');

while not obj_y.Empty do begin
writeln;
write(obj_y.Top.value, ': ');
while not obj_y.Top.obj_x.Empty do begin
write(obj_y.Top.obj_x.Top.value, ', ');
obj_y.Top.obj_x.Pop;
end;

obj_y.Pop;
end;

obj_y.Free;

readln;
end.



--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
почему-то у всех элементов в очереди класса obj_y: Y, значения элементов obj_x одинаковы
Это ты как определил? См. скриншот:

Прикрепленное изображение

Что именно указывает на одинаковость?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


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

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

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


blink.gif !fie.gif

Прикрепленное изображение

Сообщение отредактировано: klem4 -


Прикрепленные файлы
Прикрепленный файл  klem4_o_O.rar ( 2.52 килобайт ) Кол-во скачиваний: 85


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Randomize вынеси в основную часть программы... Не надо ей пользоваться в цикле.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


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

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

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


не ждал я от туда подставы smile.gif)) спасибо!


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 28.09.2020 17:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name