IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> "Классы". что это и как используется?, Klass. Was ist Das?
сообщение
Сообщение #1


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Я часто слышу такое понятие, как "классы", например -
Цитата
при использовании классов в паскале ...

Но нигде не говорится, что это такое.
Что-же это такое и с чем их едят?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Классы - следующее поколение объектов.
Пример описания:
Код

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 smile.gif и т. д. Как работает думаю, что понятно. Есть ещё одна деталь: словечко затесалось в объявлении свойства - 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;

Приер туповат, но верен smile.gif

Вот. Это то, что касается классов в Object Pascal. А ещё надо отметить, что ВСЕ экземпляры классов размещаются в куче. Т. е. переменные a из примеров по сути указатели на экземпляры классов. А так, всё что было (наследование, полиформизм) и т. д. всё осталось.
Забыл ещё сказать, что кроме Private и Public появилось ещё Protected. Это когда сам видишь, дети твои видят, а от внешнего мира спрятано. Как-то странно прозвучало smile.gif

Всё Delphi для большинства по сути и есть кучка классов из VCL.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 303
Пол: Мужской
Реальное имя: Роман

Репутация: -  2  +


Классы, по сути - те же объекты.


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Супер. Спасибо, romtek.
Я оценил классы.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


еще добавлю, что класс по умолчанию всегда наследуется от TObject, т.е. у него сразу есть несколько полезных методов (правда я ни разу ими не пользовался). так что если хочешь создать собственный объект полностью с нуля, используй лучше object (если конечно не компонент пишешь)

PS: какое отношение имеет перегрузка к классам ? unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






А ты с Reintroduced сталкивался?
Вот такое и имеет.

А ещё надо добавить, что экземпляры классов - они всегда динамические.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 1:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name