Помощь - Поиск - Пользователи - Календарь
Полная версия: fp, поле-константа
Форум «Всё о Паскале» > Pascal, Object Pascal > 32 битные компиляторы
compiler
Добрый день!
Мне надо сделать поле-константу у объекта... Но как это делается?пытался так:
private const m :byte =5; static;
но... ошибка:( помогите, пожалуйста...
заранее благодарен...
volvo
Цитата
Мне надо сделать поле-константу у объекта
А зачем? Недостаточно просто определить поле M, и в конструкторе ему присваивать какое-то значение?

Смысл этой константы в чем?
compiler
Цитата(volvo @ 12.01.2008 20:25) *

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

update
только при таком подходе необходимо создавать матрицу динамически или не обязательно?
volvo
Скорее всего, другого выхода не будет - для задания размерности статической переменной в любом случае нужна константа (и не типизированная, как ты показал в первом посте, а простая), так что без SetLength не обойтись...
compiler
Цитата(volvo @ 12.01.2008 20:58) *
Скорее всего, другого выхода не будет - для задания размерности статической переменной в любом случае нужна константа (и не типизированная, как ты показал в первом посте, а простая), так что без SetLength не обойтись...
спасибо, будем писать... ух уж это ООП:)
klem4
если поле класса - одномерный динамический массив, то хранить его размер вообще не нужно, всегда можно заюзать length.
compiler
Цитата(klem4 @ 13.01.2008 17:34) *
всегда можно заюзать length.
я подумал, с инициализирующей переменной будет даже лучше, ибо тогда размер карты можна будет легко изменить в опциях..
Archon
Хоть и старая тема, но можно было сделать 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
Цитата(Archon @ 7.02.2008 11:11) *

Хоть и старая тема, но можно было сделать property.
Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.