Классы - следующее поколение объектов.
Пример описания:
Код
Type
TMyClass=Class
Private
FMyProperty:Integer;
Procedure SetMyProperty(Value:Integer);
Public
Constructor Create;
Property MyProperty:Integer Read FMyProperty Writer SetMyProperty;
End;
Procedure TMyClass.SetMyProperty(Value:Integer);
Begin
If Value In [0..9] Then
FMyProperty:=Value
End;
Contructor TMyClass.Create;
Begin
FMyProperty:=0
End;
Ну, это самый примитив. Как видишь, тут описывается класс, в котором есть конструктор и одно свойство. При попытке считать его возвращается значение приватного поля, а при попытки записи - вызывается такая же процедура. Т. е. код
Код
Var
a:TMyClass;
Begin
a:=TMyClass.Create;
a.MyProperty:=23;
WriterLn(a.MyProperty)
End.
Выведет на экран 0.
Едем дальше. Классы ещё умеют такую фишку как свойства - индексы. Например:
Код
Type
TMyClass=Class
Private
FData:Array[0..2] Of Integer;
Function GetData(Index:Integer):Integer;
Procedure SetData(Index:Integer;Value:Integer);
Public
Contructor Create;
Property Data[Index:Integer]:Integer Read GetData Writer SetData;Default;
End;
Function TMyClass.GetData(Index:Integer):Integer;
Begin
If Index In [0..2] Then
Result:=FData[Index]
Else
Result:=-1
End;
Procedure TMyClass.SetData(Index:Integer;Value:Integer);
Begin
If Index In [0..2] Then
FData[Index]:=Value
End;
Contructor TMyClass.Create;
Var
i:Integer;
Begin
For i:=0 To 2 Do
FData[i]:=0
End;
Тут описывается конструктор и индексируемое свойство. Я для простоты демонстрации взял индексирование по Integer, а ведь можно и по String
и т. д. Как работает думаю, что понятно. Есть ещё одна деталь: словечко затесалось в объявлении свойства - Default. Очень удобное, надо сказать, словечко. Оно говорит о том, что встретив надпись InstanceOfTMyClass[x], её можно расценивать как InstanceOfMyClass.Data[x]. Пример:
Код
Var
a:TMyClass;
i:Integer;
Begin
a:=TMyClass.Create;
For i:=0 To 2 Do
a[i]:=2-i;
For i:=0 To 3 Do
WriterLn(a[i])
End.
На экран выведет
2
1
0
-1 - как результат обращения к несуществующему элементу.
Продолжим ликбез.
Есть ещё такая фишка в Object Pascal как OverLoad. Т. е. то, что есть в крови у C, а нету у Pascal. Это когда функция с одним именем, но с разными параметрами. Например:
Код
Function Abs(x:Real):Real;OverLoad;
Begin
If x<0 Then
Result:=-1
Else
Result:=x
End;
Function Abs(x:Integer):Integer;OverLoad;
Begin
If x<0 Then
Result:=-1
Else
Result:=x
End;
Приер туповат, но верен
Вот. Это то, что касается классов в Object Pascal. А ещё надо отметить, что ВСЕ экземпляры классов размещаются в куче. Т. е. переменные a из примеров по сути указатели на экземпляры классов. А так, всё что было (наследование, полиформизм) и т. д. всё осталось.
Забыл ещё сказать, что кроме Private и Public появилось ещё Protected. Это когда сам видишь, дети твои видят, а от внешнего мира спрятано. Как-то странно прозвучало
Всё Delphi для большинства по сути и есть кучка классов из VCL.