Sign in Join
Wiki copytemporary

Revision 2 of 2, by Trev on 2-10-2020. The page as it is now.

Class/ru

Класс является хорошо структурированным типом данных в Object Pascal и его диалектах (таких, как Delphi или ObjFPC). Классы могут содержать переменные, конструкторы, деструкторы, функции, процедуры и свойства.

Также классы освобождают программиста от необходимости использовать указатели и ссылки. Они автоматически обрабатываются компилятором во время компиляции.

Классы могут наследоваться от других классов или быть унаследованными в свою очередь. Любой класс, родительский класс которого не уточнен программистом, автоматически наследуется от TObject, так как он имеет необходимые компоненты для всех классов. Из-за зависимости TObject, в деструкторе любой подкласс должен иметь директиву override. Кроме того, любой из конструкторов вашего класса должен иметь в своем теле оператор inherited. Класс может иметь несколько конструкторов, но только один деструктор.

Object Pascal не поддерживает множественное наследование: кроме неявного наследования от TObject классы могут иметь только один родительский класс. Полиморфизм реализован с помощью директив методов. Ниже представлен пример простого объявления класса; давайте разберем его.

pascal
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 производные классы наследуют все члены базового класса, даже те, которые не перегружены с теми же именами. Например:

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

Модификаторы области видимости

Модификаторы области видимости сообщают компилятору кто может вызывать методы класса:

Модификаторы области видимости не могут быть изменены в производных классах: члены будут сохранять их видимость (или её отсутствие) всегда и везде.

Типы данных

Простые типы | Boolean | Byte | Cardinal | Char | Currency | Extended | Int64 | Integer | Longint | Pointer | Real | Shortint | Smallint | Word
Сложные типы | Array | Class | Record | Set | String | Shortstring


From the Free Pascal wiki, page "Class/ru", as the Internet Archive kept it on 2024-12-09, last changed on 2020-02-11. 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.