Class/ru
Deutsch · English · Français · Русский
Класс является хорошо структурированным типом данных в Object Pascal и его диалектах (таких, как Delphi или ObjFPC). Классы могут содержать переменные, конструкторы, деструкторы, функции, процедуры и свойства.
Также классы освобождают программиста от необходимости использовать указатели и ссылки. Они автоматически обрабатываются компилятором во время компиляции.
Классы могут наследоваться от других классов или быть унаследованными в свою очередь. Любой класс, родительский класс которого не уточнен программистом, автоматически наследуется от TObject, так как он имеет необходимые компоненты для всех классов. Из-за зависимости TObject, в деструкторе любой подкласс должен иметь директиву override. Кроме того, любой из конструкторов вашего класса должен иметь в своем теле оператор inherited. Класс может иметь несколько конструкторов, но только один деструктор.
Object Pascal не поддерживает множественное наследование: кроме неявного наследования от TObject классы могут иметь только один родительский класс. Полиморфизм реализован с помощью директив методов. Ниже представлен пример простого объявления класса; давайте разберем его.
type
TMyClass = class
private
FSomeVar: integer;
public
constructor Create; overload;
constructor Create(Args: array of integer); overload;
destructor Destroy; override;
function GetSomeVar: integer;
procedure SetSomeVar(newvalue: integer);
published
property SomeVar: integer read GetSomeVar write SetSomeVar default 0;
end;Между ключевыми словами class и end мы видим объявления членов - переменных и методов. Некоторым методам (функциям и/или процедурам) предшествуют модификаторы области видимости (private, public, published), за ними следуют директивы (overload, override), а также странная штука под названием property. Давайте разберем их все.
Пояснения о наследовании
В Object Pascal производные классы наследуют все члены базового класса, даже те, которые не перегружены с теми же именами. Например:
type
// базовый класс
MyClass = class
procedure Proc1;
end;
// производный класс
YourClass = class(MyClass)
procedure Proc1; //такое имя процедуры, как и в классе MyClass
end;
var
a: MyClass;
b: YourClass;
begin
a := MyClass.Create;
b := YourClass.Create;
a.Proc1; // использует процедуру класса MyClass
b.Proc1; // использует процедуру класса YourClass
MyClass(b).Proc1; // использует процедуру класса MyClassМодификаторы области видимости
Модификаторы области видимости сообщают компилятору кто может вызывать методы класса:
- private: член может быть вызван/доступен только с помощью методов данного класса;
- public: член может быть вызван/доступен из любого другого места программы;
- protected: член может быть вызван/доступен из других классов в том же модуле и из производных классов, но не из внешних классов.
- published: переменная опубликована и будет доступна в Инспекторе объектов IDE.
Модификаторы области видимости не могут быть изменены в производных классах: члены будут сохранять их видимость (или её отсутствие) всегда и везде.
From the Free Pascal wiki, page "Class/ru", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
