Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Топ:
Оснащения врачебно-сестринской бригады.
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Интересное:
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
|
из
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-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!