Классы и объекты в Object Pascal. Семенов Н.М. - 17 стр.

UptoLike

Составители: 

В строках со 10 по 13 объявляется класс, представители которого содержат
четыре поля типа Integer: FLeft, FTop, FRight и FBottom. Они также содержат поле
FColor типа TColor. TColor - стандартный тип, предоставляемый модулем Classes для
обозначения цвета простым числом размера LongInt (32 бита).
Проблема с объявлением переменной в строке 20 состоит в том, что она ещё не
содержит ни одного экземпляра TColorRect. Если Вы попытаетесь обратиться к полю
этого объекта с помощью оператора, который обычно работает с полями записи, т.е. Вы
напишите без строки 27
ARect.FLeft :=10;
в строке 28 - попытка будет безуспешной; появится ошибка выполнения, и программа
прекратит работу. Переменная ARect - это ссылочная переменная, и она не
инициализирована правильным экземпляром. Следовательно, Вы не можете
использовать её для ссылок на поля или методы.
Переменная потенциально способна хранить ссылку на экземпляр класса
TClorRect, но к этому моменту она не содержит допустимой ссылки. Она не является
допустимым экземпляром до тех пор, пока ей не будет явно присвоен какой - нибудь
экземпляр - обычно посредством вызова конструктора (строка 27).
Экземпляры объекта хранятся в памяти динамически, выделение памяти
происходит во время выполнения программы. Только небольшое количество памяти
выделяется объектной ссылке статически при объявлении переменной типа class.
Фактически экземпляр объекта вызывается к жизни во время выполнения. Поскольку
переменная класса - это просто ссылка, она не получает места в памяти для значений
объектных полей.
Процесс динамического конструирования новых экземпляров, если он успешен,
приводит к допустимой ссылке на объект. За работу по фактическому созданию
правильного экземпляра отвечает специальная подпрограмма класса, называемая
конструктором. Конструкторы - это один из возможных видов объектных методов.
2.7. Обращение к элементам объекта
Вы можете обращаться к полям данных и методам объекта с помощью той же
методики точечной нотации,
которая использовалась при обращении к полям записи.
Например, объявляя следующим образом конкретный класс TCircle
type
TCircle = class
X,
Y,
Radius: Integer;
. . .
constructor Create;
procedure Move (NewX, NewY: Integer);
end;
и соответствующий экземпляр переменной ACircle, инициализированный правильным
образом вызовом конструктора