Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

народ, оцените код [D5, D7, Win2k, WinXP]


Страницы:   1 2

Dust ©   (2005-08-01 13:58:00) 

писалось для склеивания пакетов пришедших из сети,
а так же для их сборки перед отправкой

http://nostdal.org/paste/327e65c87affb7475eb3e3215c543b05.html


Dust   (2005-08-04 13:32:00) [1]


2 tesseract ©   (04.08.05 11:03) [23]

спасибо за совет, обязательно найду и прочитаю.

2 Digitman ©   (03.08.05 14:10) [22]
спасибо за разъяснение

2ALL
я считаю, что здесь получил ответы на свои вопросы, и тему можно закрывать


tesseract   (2005-08-04 11:03:00) [2]

Возможно оффтопик:  но есть набор функций EZDSL от автора книге "Фундаментальные алгоритмы и основы данных на делфи" где реализованы Стеки ,очереди, и тд и тп. Если хочешь посмотреть как это выглядит в идеале и с поддержкой многопоточности лучше посмотри как сделано там. А ещё лучше книгу надыбай ИМХО MustHave.


Digitman   (2005-08-03 14:10:00) [3]


> Dust ©   (03.08.05 13:55) [21]


нужно.. если ты не уверен, что завтра по каким-либо (неочевидным сегодня) причинам тебе не придется сменить предка своего объекта

тело констр.метода TObject.Create - пустое, вызов этого метода холостой, но нет гарантий, что завтра Борланд не наполнит тело этого метода какой-либо функц-ю


Dust   (2005-08-03 13:55:00) [4]

а вообще это делать нужно?
нужно ли вызывать inherited если класс порождён от TObject?


Digitman   (2005-08-03 11:43:00) [5]


> Dust ©   (03.08.05 11:17) [17]


если ты написал

inherited;

то компилятор пытается обнаружить у класса-предка одноименный констр.метод с ТАКИМИ ЖЕ параметрами, и если таковой не найден, то ты получаешь как раз ту самую ошибку

если же ты написал

inherited Create(такие-то параметры, если они есть);

то компилятор пытается обнаружить у класса-предка констр.метод с ЯВНО указанным тобой именем (т.е. Create в дан.случае) с такими-то указанными тобой параметрами


Alexander Panov   (2005-08-03 11:36:00) [6]

Dust ©   (03.08.05 9:47) [7]
class function  я сделал потому, что если переопределить параметры вызова конструктора, то вызов inherited;


В классе может быть несколько конструкторов с различными параметрами.
при вызове inherited-конструктора(а это просто-напросто вызов конструктора класса-предка) имя конструктора можно указать явно, передав ему соответствующие параметры(если список параметров не совпадает со текущего конструктора), либо опустив параметры в случае полного совпадения.

И вообще, ключевое слово inherited, примененное к любому методу класса, означает всего лишь вызов метода предка.


Ega23   (2005-08-03 11:34:00) [7]


реализация:
constructor TFIFORawQueue.Create(ASize: DWord);
begin
inherited Create;//<<----Error in compilling
end; //constructor


Должно заработать.


Dust   (2005-08-03 11:17:00) [8]


> Digitman ©   (03.08.05 10:29) [13]
> покажи полный текст (декларация и реализация) класса, в
> том виде в каком "компилер на него ругается" ..

декларация:
...
constructor TFIFORawQueue.Create(ASize: DWord);
...

реализация:
constructor TFIFORawQueue.Create(ASize: DWord);
begin
 inherited; //<<----Error in compilling
end; //constructor

> [Error] FIFORawQueueClass.pas(47): Incompatible types
именно после этого я придумал функцию класса. На самом деле я не знаю зачем нужен вызов inherited
Остальной текст вы можете найти по ссылке чуть-чуть выше


Ega23   (2005-08-03 10:41:00) [9]

2 ЮЮ ©   (03.08.05 10:37) [15]
Конкретно в случае автора - вообще TObject


ЮЮ   (2005-08-03 10:37:00) [10]

>TFIFORawQueue=class (...)

многое зависит от того, что скрывается за ...


Ega23   (2005-08-03 10:34:00) [11]

Тебе надо было написать

TFIFORawQueue=class (...)
 ....
 public
  constructor Create(ASize: DWord);
 end;

constructor TFIFORawQueue.Create(ASize: DWord);
begin
inherited Create;
.......
end;



И не нужно никаких class-функций...


Digitman   (2005-08-03 10:29:00) [12]


> Dust ©   (03.08.05 10:27) [12]


покажи полный текст (декларация и реализация) класса, в том виде в каком "компилер на него ругается" ..


Dust   (2005-08-03 10:27:00) [13]


> Digitman ©   (03.08.05 10:16) [10]
>
> > актуальные параметры
>
>
> что за "актуальные" ?
>
> есть формальные параметры и есть фактические параметры ..

оговорился, формальные параметры.

определяю конструктор с входными параметрами


evvcom   (2005-08-03 10:26:00) [14]


> когда я переопределяю актуальные параметры конструктора

Это как раз формальные параметры. Чтобы использовать то же имя с другими типами параметров функцию/процедуру/метод надо перегружать, используя волшебное слово overload; А можно, чтобы меньше путаться свой новый конструктор назвать несколько иначе. Ключевым здесь является слово constructor, а не само имя Create.


Digitman   (2005-08-03 10:16:00) [15]


> актуальные параметры


что за "актуальные" ?

есть формальные параметры и есть фактические параметры ..


> переопределяю


что значит "переопределяю" ?

либо определяешь новый метод, либо перекрываешь одноименный виртуальный метод предка ..


Dust   (2005-08-03 10:06:00) [16]

люди, объясните пожалуйста, что за вызов inherited? и почему, когда я переопределяю актуальные параметры конструктора
constructor TFIFORawQueue.Create(ASize: DWord);
компилер на него ругается
[Error] FIFORawQueueClass.pas(47): Incompatible types
столкнувшись именно с этим я  создал функцию класса


Digitman   (2005-08-03 09:47:00) [17]


> до сих пор считаю, что именно конструктор создаёт объект


TFIFORawQueue = class(...)
public
 constructor Create(ASize: DWord);
 destructor Destroy; override;
end;

constructor TFIFORawQueue.Create(ASize: DWord);
begin
 inherited;
 with flatlist do
 begin
   GetMem(pFlat, Size);
   Size := Asize;
 end;
end;

destructor TFIFORawQueue.Destroy;
begin
 FreeMem(flatlist.pFlat);
 inherited;
end;

...

FIFORawQueueInstance := TFIFORawQueue.Create(100);


Dust   (2005-08-03 09:47:00) [18]

2 Defunct
  class function я сделал потому, что если переопределить параметры вызова конструктора, то вызов inherited;
становится недоступным.
вообще я не силён в ООП.
насчёт структуры - в начале она вообще присутствовала в рамках друго объекта, а полей у него было!!! тьма тьмущая, я принял решение упростить объект, и разделить его на несколько частей, потому как чем дальше этот объект(т.ч. класс) я описывал тем более дремучим он становился, а если уже есть готовая структура... почему бы ею же и не воспользоваться


Dust   (2005-08-03 09:37:00) [19]

2Ega23

> Всё-таки непонятно, зачем нужен constructor, у которого
> только inherited вызов идёт?

Я до сих пор считаю, что именно конструктор создаёт объект.

и именно поэтому вызовов конструктора я поместил в функцию класса
class function TFIFORawQueue.CreateFIFORawQueue(
 const size: dword): TFIFORawQueue;
begin
 Result:=TFIFORawQueue.Create();     
Result.flatlist.pFlat:=AllocMem(size);
 Result.flatlist.size   :=size;
 Result.flatlist.shiftR :=0;
 Result.flatlist.shiftL :=0;
 Result.flatlist.isDataPresent :=false;
end; //class function TFIFORawQueue.CreateFIFORawQueue


Ega23   (2005-08-02 15:38:00) [20]

Всё-таки непонятно, зачем нужен constructor, у которого только inherited вызов идёт?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо