Цитата
при использовании классов в паскале ...
Но нигде не говорится, что это такое.
Что-же это такое и с чем их едят?
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
"Классы". что это и как используется?, Klass. Was ist Das? |
Altair |
Сообщение
#1
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Я часто слышу такое понятие, как "классы", например -
Цитата при использовании классов в паскале ... Но нигде не говорится, что это такое. Что-же это такое и с чем их едят? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
BlackShadow |
Сообщение
#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 и т. д. Как работает думаю, что понятно. Есть ещё одна деталь: словечко затесалось в объявлении свойства - 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. |
Romtek |
Сообщение
#3
|
Знаток Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: 2 |
Классы, по сути - те же объекты.
-------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
Altair |
Сообщение
#4
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Супер. Спасибо, romtek.
Я оценил классы. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
P@sh@ |
Сообщение
#5
|
Бывалый Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: 2 |
еще добавлю, что класс по умолчанию всегда наследуется от TObject, т.е. у него сразу есть несколько полезных методов (правда я ни разу ими не пользовался). так что если хочешь создать собственный объект полностью с нуля, используй лучше object (если конечно не компонент пишешь)
PS: какое отношение имеет перегрузка к классам ? |
BlackShadow |
Сообщение
#6
|
Гость |
А ты с Reintroduced сталкивался?
Вот такое и имеет. А ещё надо добавить, что экземпляры классов - они всегда динамические. |
Текстовая версия | 23.12.2024 20:15 |