Difference between revisions of "Class/ru"
Line 26: | Line 26: | ||
Между [[Keyword/ru|ключевыми словами]] '''class''' и '''end''' мы видим объявления членов - переменных и методов. Некоторым методам (функциям и/или процедурам) предшествуют модификаторы области видимости ('''private''', '''public''', '''published'''), за ними следуют директивы ('''overload''', '''override'''), а также ''странная штука'' под названием '''property'''. Давайте разберем их все. | Между [[Keyword/ru|ключевыми словами]] '''class''' и '''end''' мы видим объявления членов - переменных и методов. Некоторым методам (функциям и/или процедурам) предшествуют модификаторы области видимости ('''private''', '''public''', '''published'''), за ними следуют директивы ('''overload''', '''override'''), а также ''странная штука'' под названием '''property'''. Давайте разберем их все. | ||
+ | |||
+ | == Пояснения о наследовании == | ||
+ | В Object Pascal производные классы наследуют все члены базового класса, даже те, которые не перегружены с теми же именами. Например: | ||
+ | |||
+ | <syntaxhighlight> | ||
+ | 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 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | == Модификаторы области видимости == | ||
+ | |||
+ | Модификаторы области видимости сообщают компилятору кто может вызывать методы класса: | ||
+ | * '''private''': член может быть вызван/доступен только с помощью методов данного класса; | ||
+ | * '''public''': член может быть вызван/доступен из любого другого места программы; | ||
+ | * '''protected''': член может быть вызван/доступен из других классов в том же модуле и из производных классов, но не из внешних классов. | ||
+ | * '''published''': переменная опубликована и будет доступна в Инспекторе объектов IDE. | ||
+ | |||
+ | Модификаторы области видимости не могут быть изменены в производных классах: члены будут сохранять их видимость (или её отсутствие) всегда и везде. | ||
{{Data types/ru}} | {{Data types/ru}} |
Revision as of 06:37, 7 February 2018
│
Deutsch (de) │
English (en) │
français (fr) │
русский (ru) │
Класс является хорошо структурированным типом данных в 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.
Модификаторы области видимости не могут быть изменены в производных классах: члены будут сохранять их видимость (или её отсутствие) всегда и везде.
Типы данных | |
---|---|
Простые типы | Boolean | Byte | Cardinal | Char | Currency | Extended | Int64 | Integer | Longint | Pointer | Real | Shortint | Smallint | Word |
Сложные типы | Array | Class | Record | Set | String | Shortstring |