Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ fp, поле-константа

Автор: compiler 13.01.2008 0:47

Добрый день!
Мне надо сделать поле-константу у объекта... Но как это делается?пытался так:

private const m :byte =5; static;
но... ошибка:( помогите, пожалуйста...
заранее благодарен...

Автор: volvo 13.01.2008 1:25

Цитата
Мне надо сделать поле-константу у объекта
А зачем? Недостаточно просто определить поле M, и в конструкторе ему присваивать какое-то значение?

Смысл этой константы в чем?

Автор: compiler 13.01.2008 1:32

Цитата(volvo @ 12.01.2008 20:25) *

А зачем? Недостаточно просто определить поле M, и в конструкторе ему присваивать какое-то значение?
так и сделаю, спасибо...
Цитата(volvo @ 12.01.2008 20:25) *
Смысл этой константы в чем?
размер поля массива...

update
только при таком подходе необходимо создавать матрицу динамически или не обязательно?

Автор: volvo 13.01.2008 1:58

Скорее всего, другого выхода не будет - для задания размерности статической переменной в любом случае нужна константа (и не типизированная, как ты показал в первом посте, а простая), так что без SetLength не обойтись...

Автор: compiler 13.01.2008 2:01

Цитата(volvo @ 12.01.2008 20:58) *
Скорее всего, другого выхода не будет - для задания размерности статической переменной в любом случае нужна константа (и не типизированная, как ты показал в первом посте, а простая), так что без SetLength не обойтись...
спасибо, будем писать... ух уж это ООП:)

Автор: klem4 13.01.2008 22:34

если поле класса - одномерный динамический массив, то хранить его размер вообще не нужно, всегда можно заюзать length.

Автор: compiler 13.01.2008 23:27

Цитата(klem4 @ 13.01.2008 17:34) *
всегда можно заюзать length.
я подумал, с инициализирующей переменной будет даже лучше, ибо тогда размер карты можна будет легко изменить в опциях..

Автор: Archon 7.02.2008 16:11

Хоть и старая тема, но можно было сделать property. Например так:

type
MyObj = object // Это тестовый объект
private
Arr: array of integer; // Это наш массив
function GetArrLen: byte;
procedure SetArrLen(Len: byte);
public
property ArrLen: byte read GetArrLen write SetArrLen; // Это свойство (property)
end;

// При чтении свойства ArrLen будет вызываться эта функция
function MyObj.GetArrLen: byte;
begin
GetArrLen := Length(Arr);
end;

// При записи значения в свойство ArrLen будет вызываться эта процедура
procedure MyObj.SetArrLen(Len: byte);
begin
SetLength(Arr, Len);
end;

// Пример использования:
var
M1: MyObj;
begin
M1.ArrLen := 10; // Задали размер массива Arr равным 10
WriteLn(M1.ArrLen); // Вывели на экран размер массива Arr (10)
end.

Автор: compiler 8.02.2008 0:44

Цитата(Archon @ 7.02.2008 11:11) *

Хоть и старая тема, но можно было сделать property.
Спасибо!