Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.26;
Скачать: CL | DM;

Вниз

класс   Найти похожие ветки 

 
Relict   (2002-12-15 14:10) [0]

каждый экземпляр класса должен представлять собой массив значений(кокого типа неважно...можно любой)
обеспечить возможность работы с элементами этого массива как и с обычным массивом...

вот лаба такая задана...низнаю как подступиться..
если с обычным массивом:

a: array[1..5] of Integer;
....
a[i]:=....

а как к своему классу приделать квадратные скобки?


 
Alx2 ©   (2002-12-15 14:13) [1]

>Relict (15.12.02 14:10)
property ValueByIndex[Index:integer]:integer read GetValueByIndex write SetValueByIndex; default;


 
han_malign ©   (2002-12-15 14:14) [2]

function getItem(Index: integer{string, etc}): TMyType;
procedure putItem(Index: integer{string, etc}; Value: TMyType);
property Items[Index: integer{string, etc}]: TMyType read GetItem write PutItem; default;


 
Сергей Бушин ©   (2002-12-15 14:40) [3]

А что TList не поможет?


 
Relict   (2002-12-15 14:56) [4]

не, TList не поможет...надо ручками...
а как потом обьявлять экземпляр класса?



 
Alx2 ©   (2002-12-15 14:59) [5]

A : ТипаМойДинамическийМассив;
Begin
A := ТипаМойДинамическийМассив.Create;
A[10] := 25;
A.Free
End;


 
han_malign ©   (2002-12-15 15:00) [6]

vectord : TVector;
......................
vector:=TVector.Create(...)
??????????????????????????????????????????????????????????
З.Ы. Шел бы ты книжку читать, пока не зафлеймили...


 
Relict   (2002-12-15 15:17) [7]

а где задавать скока элементов массива будет....?


 
han_malign ©   (2002-12-15 15:22) [8]

Add,Insert,Remove,Delete,SetLength,Count,Create(666)..................................................................................


 
Relict   (2002-12-15 17:23) [9]

все равно немного не догоняю
вот допустим мой класс

unit MyClass;

interface

type TMassiv = class (TObject)
I_Test: Integr;
public

function GetItem (Index: integer):TMassiv;
procedure PutItem (Index: integer; Value:TMassiv);

property Items[Index: integer]: TMassiv read GetItem write PutItem;default;

end;

implementation

procedure TMassiv.PutItem(Index: integer; Value:TMassiv);
begin
end;

function TMassiv.GetItem (Index: integer):TMassiv;
begin

end;


end.


вот так я в основном модуле делаю:

procedure TForm1.Button1Click(Sender: TObject);
var a: TMassiv;
i: Integer;
begin
a:= TMassiv.Create();
for i:=0 to 10 do
begin
a[i].I_Test:=i;
end;

for i:=0 to 10 do a[i].I_Test:=i;

for i:=0 to 10 do memo1.Lines.Add( IntToStr(a[i].I_Test));

end;

а в memo у меня одни десятки....)
я так понимаю что пишу в один и тот же объект...а почему тогда скобочки прокатывают...
и что надо написть в GetItem и PutItem?






 
han_malign ©   (2002-12-15 17:53) [10]

слов нет...
Это не падает с жутким треском только потому, что перед неявным вызовом пустого метода GetItem, в EAX помещается адрес на тот единственный созданный экземпляр, котрый через тот же EAX и выдается как значение элемента(функции GetItem), то-есть ты всегда обращаешься к одному и тому-же экземпляру класса.
ВНИМАНИЕ: Когда ты поймешь все, что я здесь написал, и что к чему - вот ТОГДА задавай следущий вопрос на этом форуме.


 
Relict   (2002-12-15 18:06) [11]

так я сказал что понимаю что пишу в один и тот же...и что методы пустые...
я нипанимаю массив как зделать...понимаешь...я не прошу за меня написать...я прошу мне объяснить!



 
Relict   (2002-12-15 18:23) [12]

кстати экземпляр и должен быть один единственные...покрайней мере как я пинимаю...
а вот I_Test внутри этого экземпляра должны быть разные в зависимости от индекса у экземпляра...
то есть в медоте Create экземпляра должна выделится память под все эти I_Test, но как связать нужный I_Test с индексом...
допустим I_Test будет указателем на область памяти выделенную для хранения этих I_Test (то есть если они типа Integer - по 4 байта на каждый) и GetItem будет вытаскивать нужный I_Test из этой области : I_Test(как указатель) + на сколько байт сместится (в зависимости от индекса)...вообщето чушь какая то получается...поэтому и начал спрашивать...
хотя может и снова в первый класс пора...


 
Anatoly Podgoretsky ©   (2002-12-15 18:24) [13]

Тебе не нужны классы, тебе достаточно простых динамических массивов, тем более стоы в твоей постановке не удастся получить такой синтаксис OBJ[n] для класса


 
Relict   (2002-12-15 18:35) [14]

так задание такое класс "динамический массив"
...
и если просто использовать динамический массив у него нижний индекс 0 а мне нужно еще при выполнение программы менять и верхний и нижний индек произвольно...[1..8] а потом допустим [5..20]..лишние удалять...


 
Anatoly Podgoretsky ©   (2002-12-15 18:46) [15]

Термине "класс" хдесь явно в другом контексте, как например класс Целые, строки и т.д.

Ты тогда выясни у задавшего тему, думаю это предподователь, что здесь понимается и вперед за буквари по Паскалю, аозможно речь идет и о классах с членами класса динамический массив, тогда будет оправдано замечание о верхнем нижнем индексе. Тема в хелпе "indexed properties"


 
Reindeer Moss Eater   (2002-12-15 18:48) [16]

Преподаватель, давая задание "создать класс "динамический массив" " не всегда имеет ввиду конкретный тип данных в Object Pascal. Создай класс с массивом, допускающим ресайзинг (используя все что тебе удобно) и задание будет считаться выполненным


 
Anatoly Podgoretsky ©   (2002-12-15 18:59) [17]

Ой сдается мне в институтах начались какие то сдачи, если судить по вопросам на форумах за последнее время


 
Fantasist ©   (2002-12-15 22:32) [18]


> GetItem будет вытаскивать нужный I_Test из этой области
> : I_Test(как указатель) + на сколько байт сместится (в зависимости
> от индекса)...вообщето чушь какая то получается...поэтому
> и начал спрашивать...
> хотя может и снова в первый класс пора...


Почему чушь? Что тут такого сложного?


unit MyClass;

interface

type
PInteger=^Integer;
TMassiv = class (TObject)
private
mData: PIntegr;
function GetItem (Index: integer):Integer;
procedure PutItem (Index: integer; Value:Integer);
public
constructor Create(Size:integer);
destructor Destroy; virtual;
public
property Items[Index: integer]: Integer read GetItem write PutItem;default;

end;

implementation

constructor TMassiv.Create(Size:integer);
begin
GetMem(mData,sizeof(Integer)*Size);
end;

destructor TMassiv.Destroy;
begin
FreeMem(mData);
end;

procedure TMassiv.PutItem(Index: integer; Value:Integer);
begin
PInteger(Integer(mData)+Index*sizeof(Integer))^:=Value;
end;

function TMassiv.GetItem (Index: integer):Integer;
begin
Result:=PInteger(Integer(mData)+Index*sizeof(Integer))^;
end;

Проверки и остальные примочки на тебе.



Страницы: 1 вся ветка

Текущий архив: 2002.12.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
3-85828
XM-AD
2002-12-06 14:54
2002.12.26
InterBase - strlen


3-85842
sndanil
2002-12-06 16:24
2002.12.26
Индексы


14-86154
nadin
2002-12-06 09:55
2002.12.26
Paradox помогите вскрыть пароль


1-85957
Zolotov
2002-12-15 15:20
2002.12.26
Как сделать, чтобы она форма закрвалась, а вторая появлялась.


6-86069
urich
2002-10-29 17:28
2002.12.26
Upload по http использую WinInet