Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Топ:
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2017-11-17 | 304 |
5.00
из
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
Значение одной объектной переменной можно присвоить другой. При этом объект не копируется в памяти, а вторая переменная просто связывается с тем же объектом, что и первая:
Листинг 1.10
Var
A, B: TMySimpleClass; // Переменные A и B не связаны с объектом
Begin
A:= TMySimpleClass.Create; // Связывание переменной A с новым объектом
// Переменная B пока еще не связана ни с каким объектом
B:= A; // Связывание переменной B с тем же объектом, что и A
// Теперь обе переменные связаны с одним объектом
B.Free; // Уничтожение объекта
// Теперь A и B не связаны ни с каким объектом
end;
Объекты могут выступать в программе не только в качестве переменных, но также элементов массивов, полей записей, параметров процедур и функций. Кроме того, они могут служить полями других объектов. Во всех этих случаях программист фактически оперирует указателями на экземпляры объектов в динамической памяти. Следовательно, объекты изначально приспособлены для создания сложных динамических структур данных, таких как списки и деревья. Указатели на объекты для этого не нужны.
С объектами-наследниками можно работать так же как и с объектами-родителями. Это, например, позволяет держать в одном массиве родственный объекты разных классов, а не создавать несколько отдельных массивов.
Пусть перед нами стоит задача рисования некоторых геометрических фигур. Возьмём прямоугольник и круг. Создадим для них два класса, наследуемых от абстрактного класса фигура. Далее поместим объекты обоих классов в один массив и будем по очереди вызовать для каждого объекта метод Draw().
Листинг 1.11
Type
TFigure= class (TObject)
procedure Draw(); virtual; abstract;
end;
TRectangle = class (TFigure)
fx,fy:integer;
procedure Draw(); override;
end;
|
TCircle = class (TFigure)
fR:integer;
procedure Draw(); override;
end;
…
var A:array [1..3] of TFigure;
i:integer;
…
procedure TRectangle.Draw;
Begin
inherited;
ShowMessage('Rectangle');
end;
procedure TCircle.Draw;
Begin
inherited;
ShowMessage('Circle');
end;
//данный код поместить в обработчик нажатия кнопки
A[1]:=TRectangle.Create();
A[2]:=TCircle.Create();
A[3]:=TRectangle.Create();
for i:=1 to 3 do A[i].Draw();
После точки в такой конструкции будут выводиться только те поля и методы, которые имеются в родительском классе. Если нужно обратиться к элементам наследников, то необходимо использовать приведение типов:
TRectangle(a[1]).x:=2;
Если заранее не известно какого типа текущий обрабатываемый элемент, то можно внести дополнительное поле в класс родителя, которое будет давать эту информацию.
Расширенное описание класса.
Помимо использования обычных полей (переменных) и методов (функций) в objectpascal встречаются их некоторые модификации. Это свойства, события, обработчики событий. В общем виде класс имеет следующую структуру (пример):
Листинг 1.12
TMyRectangle = class (TObject)
Public //раздел конструкторов и деструкторов
constructor Create; overload; //конструкторпоумолчанию
constructor Create(width,height: integer); overload; //параметрич. конструктор
Protected //в защищённом разделе находятся поля объекта
Fw: integer; //ширина - поле
FhTeg: integer; //высота - поле
Protected //раздел методов для работы со свойствами
procedureSetwidth(width:integer); //установка значения ширины - метод
function Getwidth: integer; //получение значения ширины - метод
procedureSetHeight(height:integer); //установка значения ширины - метод
function GetHeight: integer; //получение значения ширины - метод
Public //разделсвойств
property width: integer read getwidth write setwidth default 100; //свойствообъекта - ширина
property height: integer read getHeight write setHeight default 50; //свойствообъекта – высота
Protected //закрытый раздел для внутренних методов
function FindRound: real; //расчётскругления - метод
Public //раздел открытых методов для доступа к классу из вне
procedure Draw (canvas: TCanvas); //рисование - метод
Public //обработчикивнешнихсобытий
procedure WMKeyDown(var Msg: TWMKeyDown); message WM_KEYDOWN; //нажатиеклавиши
|
Protected //внутренние события
FOnResizeEvent: TNotifyEvent; //возникает при изменении размеров
Public//published если это компонент - внешнее отображение события
property OnResize: TNotifyEvent read FOnResizeEvent write FOnResizeEvent;
|
|
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!