Sign in Join
Wiki copytemporary

Class/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-Класс является хорошо структурированным [[Type/ru|типом данных]] в Object [[Pascal]] и его диалектах (таких, как Delphi или [[Mode ObjFPC/ru|ObjFPC]]). Классы могут содержать [[Variable/ru|переменные]], конструкторы, деструкторы, [[Function/ru|функции]], [[Procedure/ru|процедуры]] и [[Property/ru|свойства]].
2-
3-Также классы освобождают программиста от необходимости использовать указатели и ссылки. Они автоматически обрабатываются компилятором во время компиляции.
1+Класс является хорошо структурированным [[Type/ru|типом данных]] в Object [[Pascal]] и его диалектах (таких, как Delphi или [[Mode ObjFPC/ru|ObjFPC]]). Классы могут содержать [[Variable/ru|переменные]], конструкторы, деструкторы, [[Function/ru|функции]], [[Procedure/ru|процедуры]] и [[Property/ru|свойства]].
42
5-Классы могут наследоваться от других классов или быть унаследованными в свою очередь. Любой класс, родительский класс которого не уточнен программистом, автоматически наследуется от TObject, так как он имеет необходимые компоненты для всех классов. Из-за зависимости TObject, в деструкторе любой подкласс должен иметь директиву override. Кроме того, любой из конструкторов вашего класса должен иметь в своем теле оператор inherited. Класс может иметь несколько конструкторов, но только один деструктор.
3+Также классы освобождают программиста от необходимости использовать указатели и ссылки. Они автоматически обрабатываются компилятором во время компиляции.
64
7-Object Pascal не поддерживает множественное наследование: кроме неявного наследования от TObject классы могут иметь только один родительский класс. Полиморфизм реализован с помощью директив методов. Ниже представлен пример простого объявления класса; давайте разберем его.
5+Классы могут наследоваться от других классов или быть унаследованными в свою очередь. Любой класс, родительский класс которого не уточнен программистом, автоматически наследуется от TObject, так как он имеет необходимые компоненты для всех классов. Из-за зависимости TObject, в деструкторе любой подкласс должен иметь директиву override. Кроме того, любой из конструкторов вашего класса должен иметь в своем теле оператор inherited. Класс может иметь несколько конструкторов, но только один деструктор.
86
9-``` pascal
7+Object Pascal не поддерживает множественное наследование: кроме неявного наследования от TObject классы могут иметь только один родительский класс. Полиморфизм реализован с помощью директив методов. Ниже представлен пример простого объявления класса; давайте разберем его.
8+```
109type
11- TMyClass = class
12- private
13- FSomeVar: integer;
14- public
15- constructor Create; overload;
16- constructor Create(Args: array of integer); overload;
17- destructor Destroy; override;
18- function GetSomeVar: integer;
19- procedure SetSomeVar(newvalue: integer);
20- published
21- property SomeVar: integer read GetSomeVar write SetSomeVar default 0;
22- end;
10+ TMyClass = class
11+ private
12+ FSomeVar: integer;
13+ public
14+ constructor Create; overload;
15+ constructor Create(Args: array of integer); overload;
16+ destructor Destroy; override;
17+ function GetSomeVar: integer;
18+ procedure SetSomeVar(newvalue: integer);
19+ published
20+ property SomeVar: integer read GetSomeVar write SetSomeVar default 0;
21+ end;
2322```
2423
25-Между [[Keyword/ru|ключевыми словами]] **class** и **end** мы видим объявления членов - переменных и методов. Некоторым методам (функциям и/или процедурам) предшествуют модификаторы области видимости (**private**, **public**, **published**), за ними следуют директивы (**overload**, **override**), а также *странная штука* под названием **property**. Давайте разберем их все.
24+Между [[Keyword/ru|ключевыми словами]] **class** и **end** мы видим объявления членов - переменных и методов. Некоторым методам (функциям и/или процедурам) предшествуют модификаторы области видимости (**private** , **public** , **published**), за ними следуют директивы (**overload** , **override**), а также _странная штука_ под названием **property**. Давайте разберем их все.
2625
27-## Пояснения о наследовании
26+
2827
29-В Object Pascal производные классы наследуют все члены базового класса, даже те, которые не перегружены с теми же именами. Например:
28+## Пояснения о наследовании
3029
31-``` pascal
30+В Object Pascal производные классы наследуют все члены базового класса, даже те, которые не перегружены с теми же именами. Например:
31+```
3232type
33- // базовый класс
34- MyClass = class
35- procedure Proc1;
36- end;
37-
38- // производный класс
39- YourClass = class(MyClass)
40- procedure Proc1; //такое имя процедуры, как и в классе MyClass
41- end;
42-
43-var
44- a: MyClass;
45- b: YourClass;
46-begin
47- a := MyClass.Create;
48- b := YourClass.Create;
49- a.Proc1; // использует процедуру класса MyClass
50- b.Proc1; // использует процедуру класса YourClass
51- MyClass(b).Proc1; // использует процедуру класса MyClass
33+ // базовый класс
34+ MyClass = class
35+ procedure Proc1;
36+ end;
37+
38+ // производный класс
39+ YourClass = class(MyClass)
40+ procedure Proc1; //такое имя процедуры, как и в классе MyClass
41+ end;
42+
43+ var
44+ a: MyClass;
45+ b: YourClass;
46+ begin
47+ a := MyClass.Create;
48+ b := YourClass.Create;
49+ a.Proc1; // использует процедуру класса MyClass
50+ b.Proc1; // использует процедуру класса YourClass
51+ MyClass(b).Proc1; // использует процедуру класса MyClass
5252```
5353
54+
55+
5456## Модификаторы области видимости
5557
56-Модификаторы области видимости сообщают компилятору кто может вызывать методы класса:
58+Модификаторы области видимости сообщают компилятору кто может вызывать методы класса:
5759
58-- **private**: член может быть вызван/доступен только с помощью методов данного класса;
59-- **public**: член может быть вызван/доступен из любого другого места программы;
60-- **protected**: член может быть вызван/доступен из других классов в том же модуле и из производных классов, но не из внешних классов.
61-- **published**: переменная опубликована и будет доступна в Инспекторе объектов IDE.
60+ * **private** : член может быть вызван/доступен только с помощью методов данного класса;
61+ * **public** : член может быть вызван/доступен из любого другого места программы;
62+ * **protected** : член может быть вызван/доступен из других классов в том же модуле и из производных классов, но не из внешних классов.
63+ * **published** : переменная опубликована и будет доступна в Инспекторе объектов IDE.
6264
63-Модификаторы области видимости не могут быть изменены в производных классах: члены будут сохранять их видимость (или её отсутствие) всегда и везде.
65+Модификаторы области видимости не могут быть изменены в производных классах: члены будут сохранять их видимость (или её отсутствие) всегда и везде.
6466
67+
68+
69+Типы данных
70+---
71+Простые типы | [[Boolean/ru|Boolean]] | [[Byte/ru|Byte]] | [[Cardinal/ru|Cardinal]] | [[Char/ru|Char]] | [[Currency/ru|Currency]] | [[Extended/ru|Extended]] | [[Int64/ru|Int64]] | [[Integer/ru|Integer]] | [[Longint/ru|Longint]] | [[Pointer/ru|Pointer]] | [[Real/ru|Real]] | [[Shortint/ru|Shortint]] | [[Smallint/ru|Smallint]] | [[Word/ru|Word]]
72+Сложные типы | [[Array/ru|Array]] | Class | [[Record/ru|Record]] | [[Set/ru|Set]] | [[String/ru|String]] | [[Shortstring/ru|Shortstring]]
73+
6574---
66-*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](/wiki-contact).*
75+*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](/wiki-contact).*

Back to history