Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
1-85946
Юз
2002-12-15 14:05
2002.12.26
Список файлов из каталога


6-86053
olphi
2002-10-27 13:34
2002.12.26
Как узнать трафик сессии (инета) после её завершения?


1-85988
Самовар - Чайник
2002-12-15 20:29
2002.12.26
Что такое MSDN, с чем его едят и где его можно взять ?


1-85998
___Nikolay
2002-12-14 08:19
2002.12.26
Как можно изменить вид ПОЛОСЫ ПРОКРУТКИ?


1-85966
Brat-2
2002-12-15 18:54
2002.12.26
Размер исполняемого EXE-файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский