Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
8th
Ноя
Constructor
Posted by key under Советы, Статьи
Определяет метод, используемый для создания объекта из класса
- type Class declaration
…
Constructor Name; {Overload;}
…
end; - type Class declaration
…
Constructor Name(Arguments); {Overload;}
…
end;
Описание:
При создании объекта вы вызываете метод-конструктор класса, не объекта:
имяОбъекта := имяКласса.Create(параметры);
Обычно конструктор называют Create, но ограничений на имя нет. Разумней будет оставить это имя.
Объект может быть сконструирован с аргументами или без них (см. пример).
Конструкторы могут быть объявлены в секциях public или published определения класса.
Вы можете создать несколько конструкторов, но в этом случае опубликовать в секции Published можно только один из них. В случае нескольких конструкторов, после каждого из них должна стоять директива Overload, как того требует Delphi.
При реализации процедуры-конструктора, обычно называемого Create, у вас должно войти в привычку вызов конструктора предка, например
constructor Create;
inherited; >
…
Это гарантирует, что получившийся объект будет безопасно проинициализированным экземпляром родительского класса, даже если родитель — это TObject, чей конструктор ничего не делает. Код примера иллюстрирует простой вызов Inherited плюс версию, в которой конструктор родителя принимает аргументы.
Пример кода:
// ————————————————————
// You must store this code in a unit called Unit1 with a form
// called Form1 that has an OnCreate event called FormCreate.
unit Unit1;
interface
uses
Forms, Dialogs, Classes, Controls, StdCtrls;
type
// Define a parent class, base on TObject by default
TFruit = class
public
name : string;
Constructor Create; overload; // This constructor uses defaults
Constructor Create(name : string); overload;
end;
// Define a descendant types
TApple = class(TFruit)
public
diameter : Integer;
published
Constructor Create(name : string; diameter : Integer);
end;
// The class for the form used by this unit
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm} // Include form definitions
// Create a fruit object — parameterless version
constructor TFruit.Create;
begin
// Execute the parent (TObject) constructor first
inherited; // Call the parent Create method
// Now set a default fruit name
self.name := ‘Fruit’;
end;
// Create a fruit object — parameterised version
constructor TFruit.Create(name: string);
begin
// Cannot execute the parent constructor — parms differ
// And save the fruit name
self.name := name;
end;
// Create an apple object
constructor TApple.Create(name: string; diameter : Integer);
begin
// Execute the parent (TFruit) constructor first
inherited Create(name); // Call the parent method
// Now save the passed apple diameter
self.diameter := diameter;
end;
// Main line code
procedure TForm1.FormCreate(Sender: TObject);
var
fruit : TFruit;
banana : TFruit;
apple : TApple;
begin
// Create 3 different fruit objects
fruit := TFruit.Create;
banana := TFruit.Create(‘Banana’);
apple := TApple.Create(‘Pink Lady’, 12);
// See which of our objects are fruits
if fruit Is TFruit then ShowMessage(fruit.name +’ is a fruit’);
if banana Is TFruit then ShowMessage(banana.name +’ is a fruit’);
if apple Is TFruit then ShowMessage(apple.name +’ is a fruit’);
// See which objects are apples
if fruit Is TApple then ShowMessage(fruit.name +’ is an apple’);
if banana Is TApple then ShowMessage(banana.name +’ is an apple’);
if apple Is TApple then ShowMessage(apple.name +’ is an apple’);
end;
end.
Результат выполнения:
Banana is a fruit
Pink Lady is a fruit
Pink Lady is an apple
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы – геометрия природы
Crypt – Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)