![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
народ, оцените код [D5, D7, Win2k, WinXP]
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 вызов идёт?