![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 24.05.2009
Сообщений: 25
|
![]()
помогите разобраться с парой директив
{$MODE OBJFPC} unit stringstore; interface uses sysutils; type TStoreString=class procedure Put(const S:string); virtual;abstract; {вот первые 2 virtual;abstract; если я правильно понял первая объявляет что метод виртуален а вторая говорит что он абстрактен а значит обязательно должен быть переопределён в потомке поправте если я не прав} function Get:string; virtual; abstract; end; TStoreStringM = class(TstoreString) constructor Create(const s:string); procedure Put(const s:string);override; {вот ещё одна директива override вот про неё я вообще не чего не знаю если можно объясните поподробнее и понятным языком } function Get:string; override; private str:string; end; implementation constructor TStoreStringM.Create(const s:string); begin inherited create; str:=s; end; procedure TstoreStringM.put(const s:string); begin str:=s; end; function TstoreStringM.Get:string; begin result:=str; end; end. |
![]() |
![]() |
![]() |
#2 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]()
http://delphibasics.ru/Class.php
http://delphibasics.ru/Virtual.php http://delphibasics.ru/Dynamic.php http://delphibasics.ru/Overload.php http://delphibasics.ru/Override.php http://delphibasics.ru/Abstract.php
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
![]() |
![]() |
![]() |
#3 |
Заблокирован
Регистрация: 14.01.2010
Сообщений: 92
|
![]()
> должен быть переопределён в потомке поправте если я не прав
Прав. ТОлько не "переопределен", а "перекрыт" Одноименный метод потомка со спецификатором override как раз и перекрывает виртуальный метод предка, ВНЕ зависимости абстрактен ли он. Абстрактность метода подразумевает НЕвозможность его вызова, если он не перекрыт ни в одном из потомков. Т.е. метод некоего класса, объявленный как виртуальный, м.б. вызван и не вызовет ошибки, если он не перекрыт ни в одном из потомков. И точно так же он м.б. вызван, если он к тому же абстрактен, но вызов при этом приведет к отказу, если ни один из потомков его не перекрыл. Ущучил суть ?) Последний раз редактировалось Сергeй; 21.01.2010 в 19:35. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 24.05.2009
Сообщений: 25
|
![]()
спасибо!!!
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 24.05.2009
Сообщений: 25
|
![]()
{$mode objfpc}
unit ispersonal; interface uses infosys; type TISPersonal = class private fpersons:array of TPeople; public constructor Create(); destructor Destroy(); override; function add(p:TPeople):TPeople; function delete(P:TPeople):TPeople; function indexof(p:tpeople):integer; function getPersons(index:integer):TPeople; function getPersonCount():integer; function getPeoples(index: integer):TPeople; function getStudents(index: integer):TStudent; function getStudentCount:integer; function getFilter(typePerson: string; searchfield, value: string; index:integer):TPeople; function getFilterCount(typePerson: string; searchfield, value: string; index:integer):integer; procedure DestroyPersone(P:TPeople); procedure DestroyAll(); procedure DeleteAll(); property peoples[index: integer]:TPeople; property PeopleCount:integer; property Students[index: integer]:TStudent; property StudentCount:integer; property Persone[index: integer]:TPeople; property PersonCount:integer; property Filter[typePerson:integer; SearchField: string; value: variant; index: integer]:TPeople; property FilterCount[typePerson:integer; SearchField: string; value: string]:integer; { объясните что в каждом случае делает св-во property } fullsearch:boolean; end; implementation constructor TISPersonal.create(); begin inherited Create(); setlength(fpersons, 0); end; destructor TISPersonal.destroy(); begin setlength(fpersons, 0); inherited destroy; end; function TISPersonal.indexof(p:tpeople):inte ger; var i: integer; begin result:=-1; for i:=0 to length(fpersons)-1 do if p = fpersons[i] then begin result:=i; exit; end; end; function TISPersonal.add(p:TPeople):TPeople; begin if indexof(p)<0 then begin setlength(fpersons, length(fpersons)+1); fpersons[length(fpersons)-1]:=P; end; result:=p; end; function TISPersonal.delete(P:TPeople):TPeop le; var index,i: integer; begin result:=p; index:=indexof(p); if index < 0 then exit; for i:=index+1 to length(fpersons)-1 do fpersons[i-1] := fpersons[i]; setlength(fpersons, length(fpersons)-1); end; procedure TISPersonal.DestroyPersone(P:TPeopl e); begin delete(p); p.destroy(); end; procedure TISPersonal.DeleteAll(); begin setlength(fpersons, 0); end; procedure TISPersonal.DestroyAll(); var i:integer; begin for i:=0 to length(fpersons)-1 do fpersons[i].destroy(); deleteall(); end; function TISPersonal.getPersons(index:intege r):TPeople; begin result:=fpersons[index]; end; function TISPersonal.getPersonCount():intege r; begin result:=length(fpersons); end; function TISPersonal.getPeoples(index: integer):TPeople; var i:integer; begin for i:=0 to length(fpersons)-1 do begin if fpersons[i].id = {TPeople.id}'Lichnost' then begin dec(index); if index<0 then begin result:=fpersons[i]; exit; end; end; end; result:=nil; end; function TISPersonal.getStudents(index: integer):TStudent; var i:integer; begin for i:=0 to length(fpersons)-1 do begin if fpersons[i].id = TStudent.id then begin dec(index); if index<0 then begin result:=TStudent(fpersons[i]); exit; end; //result:=fpersons[i] as TStudent; end; end; result:=nil; end; function TISPersonal.getStudentCount:integer ; var i,index:integer; begin result:=0; index:=0; for i:=0 to length(fpersons)-1 do begin if fpersons[i].id = TStudent.id then begin inc(index); end; end; end; function TISPersonal.getFilter(typePerson: string; searchfield, value: string; index:integer):TPeople; var s:string; i:integer; begin for i:=0 to length(fpersons)-1 do begin if (typePerson = '') or (typePerson = fpersons[i].id) then begin s:=fpersons[i].GetField(searchfield); if fullsearch then begin if (s=value) then begin dec(index); if index<0 then begin result:=fpersons[i]; exit; end; end; end else begin if(pos(value, s)<>0) then begin result:=fpersons[i]; exit; end; end; end; end; end; function TISPersonal.getFilterCount(typePers on: string; searchfield, value: string; index:integer):integer; var s:string; i:integer; begin result:=0; for i:=0 to length(fpersons)-1 do begin if (typePerson = '') or (typePerson = fpersons[i].id) then begin s:=fpersons[i].GetField(searchfield); if fullsearch then begin if s=value then begin inc(result); end; end else begin if pos(value, s)<>0 then inc(result); end; end; end; end; end. Последний раз редактировалось demonara; 21.01.2010 в 22:15. |
![]() |
![]() |
![]() |
#6 |
Заблокирован
Регистрация: 14.01.2010
Сообщений: 92
|
![]()
> может кто нибуть объяснить
"Нибуть" я могу. > директива override вот про неё я вообще не чего не знаю Здрасте вам фаберже !) Я кому, спрашивается, в 1-м ответе пыхтел-старался объснить на огурцах суть этого спецификатора ?) |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 24.05.2009
Сообщений: 25
|
![]()
за первый ответ большое спасибо здесь уже другой вопрос если можеш объясни буду признателен
|
![]() |
![]() |
![]() |
#8 |
Заблокирован
Регистрация: 14.01.2010
Сообщений: 92
|
![]()
Стучи в ICQ.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Free Pascal задачи на строки | andrey2 | Помощь студентам | 9 | 25.12.2011 16:31 |
В Поиске документация ( Книга ) Free pascal | ThreeX | Помощь студентам | 2 | 31.07.2009 17:56 |
а free pascal не читает задачи которые написаны на turbo pascal? | demonara | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 25.05.2009 16:28 |
Free pascal | Иллидан | Свободное общение | 5 | 17.04.2008 12:22 |
Free Pascal(2.0.4) ошибка: Error while linking | Акашаев Нурлан | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 04.08.2007 10:10 |