Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2010, 19:26   #1
demonara
Пользователь
 
Регистрация: 24.05.2009
Сообщений: 25
По умолчанию ооп free pascal

помогите разобраться с парой директив
{$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.
demonara вне форума Ответить с цитированием
Старый 21.01.2010, 19:30   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 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 ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 21.01.2010, 19:30   #3
Сергeй
Заблокирован
 
Регистрация: 14.01.2010
Сообщений: 92
По умолчанию

> должен быть переопределён в потомке поправте если я не прав

Прав.
ТОлько не "переопределен", а "перекрыт"

Одноименный метод потомка со спецификатором override как раз и перекрывает виртуальный метод предка, ВНЕ зависимости абстрактен ли он.

Абстрактность метода подразумевает НЕвозможность его вызова, если он не перекрыт ни в одном из потомков.

Т.е. метод некоего класса, объявленный как виртуальный, м.б. вызван и не вызовет ошибки, если он не перекрыт ни в одном из потомков.
И точно так же он м.б. вызван, если он к тому же абстрактен, но вызов при этом приведет к отказу, если ни один из потомков его не перекрыл.

Ущучил суть ?)

Последний раз редактировалось Сергeй; 21.01.2010 в 19:35.
Сергeй вне форума Ответить с цитированием
Старый 21.01.2010, 19:32   #4
demonara
Пользователь
 
Регистрация: 24.05.2009
Сообщений: 25
По умолчанию

спасибо!!!
demonara вне форума Ответить с цитированием
Старый 21.01.2010, 21:55   #5
demonara
Пользователь
 
Регистрация: 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.
demonara вне форума Ответить с цитированием
Старый 21.01.2010, 22:05   #6
Сергeй
Заблокирован
 
Регистрация: 14.01.2010
Сообщений: 92
По умолчанию

> может кто нибуть объяснить

"Нибуть" я могу.

> директива override вот про неё я вообще не чего не знаю

Здрасте вам фаберже !)

Я кому, спрашивается, в 1-м ответе пыхтел-старался объснить на огурцах суть этого спецификатора ?)
Сергeй вне форума Ответить с цитированием
Старый 21.01.2010, 22:14   #7
demonara
Пользователь
 
Регистрация: 24.05.2009
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Сергeй Посмотреть сообщение
> может кто нибуть объяснить

"Нибуть" я могу.

> директива override вот про неё я вообще не чего не знаю

Здрасте вам фаберже !)

Я кому, спрашивается, в 1-м ответе пыхтел-старался объснить на огурцах суть этого спецификатора ?)
за первый ответ большое спасибо здесь уже другой вопрос если можеш объясни буду признателен
demonara вне форума Ответить с цитированием
Старый 21.01.2010, 22:22   #8
Сергeй
Заблокирован
 
Регистрация: 14.01.2010
Сообщений: 92
По умолчанию

Стучи в ICQ.
Сергeй вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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