Вниз
Скачать: CL | DM;

ООП   Найти похожие ветки 

← →
v2 ©   (2010-12-13 03:10) [0]

Можно ли создать (вызвать Create) дочерний объект из базового класса?


← →
Юрий Зотов ©   (2010-12-13 03:25) [1]

Без проблем. Может потребоваться опережающее объявление дочернего класса.


← →
Ega23 ©   (2010-12-13 08:03) [2]

Можно. Но вопрос поставлен некорректно, требуется уточнение.


← →
v2 ©   (2010-12-13 14:22) [3]

Базовый класс должен автоматизировать создание дочерних объектов из потока входящих данных:
---------


unit A;

class procedure TBase.Load;
var
newTChild : Pointer; //?
begin
newTChild := TChild.Create; // ???
...
end;


-----------


unit B;

TChild=class(TBase);
...



← →
Ega23 ©   (2010-12-13 14:30) [4]

TAncestor = class (TObject)
public
 constructor Create; virtual;
end;

TAncestorClass = class of TAncestor;

TChild = class (TAncestor)
public
 constructor Create; override;
end;

TBase = class (.....)
 class procedure Load;
 property AncestorClass: TAncestorClass read FAncestorClass write FAncestorClass;
end;

class procedure TBase.Load;
begin
 with FAncestorClass.Create do
 begin

 end;
end;


← →
Юрий Зотов ©   (2010-12-13 15:16) [5]

Добавление к [4]: поток входных данных должен содержать имя фактического дочернего класса, а сами дочерние классы должны быть зарегистрированы. Тогда, прочитав из потока имя класса, мы сможем создать его экземпляр.


← →
v2 ©   (2010-12-13 15:57) [6]

[4]: получаем TChild = class(TAncestor), а хотелось бы  TChild = class(TBase) и, по возможности, TBase должен быть в библиотечном модуле.

[5]: Идея такова: TChild где-нибудь в class procedure TChild.Init заполняет class var TBase.DataStruct offset"ами своих полей и их размерами, а TBase в Load (который будет вызван в TChild.Init) создает TChild"ов и наполняет.

Пока делаю через class var TBase.PtrToNewChildFunc

Но попутно еще вопрос:
Как сделать class var TBase.Var уникальной для разных классов наследников => ( @TChild01.TBase.Var <> @TChild02.TBase.Var )


← →
Ega23 ©   (2010-12-13 16:06) [7]


> Пока делаю через class var TBase.PtrToNewChildFunc

Успехов.

@TChild01.TBase.Var <> @TChild02.TBase.Var

Орех.


← →
oxffff ©   (2010-12-13 16:08) [8]

Не смогу помочь.


← →
Юрий Зотов ©   (2010-12-13 17:01) [9]

> v2 ©   (13.12.10 15:57) [6]

> [5]: Идея такова: TChild где-нибудь в class procedure TChild.Init заполняет
> class var TBase.DataStruct offset"ами своих полей и их размерами

И что произойдет, если какое-то поле есть длинная строка, динамический масссив, объект или любой другой указатель? А ведь такое встречается часто.

> TBase в Load (который будет вызван в TChild.Init) создает TChild"ов и
> наполняет.

Почему бы не использовать стандартную сериализацию VCL? См.справку по классу TPersistent.

> Как сделать class var TBase.Var уникальной для разных классов
> наследников => ( @TChild01.TBase.Var <> @TChild02.TBase.Var )

Прочитал. Долго думал. Не понял. Так 3 раза. Все равно ничего не понял. ТАКОГО языка я просто не знаю.

Что такое class var?
Что такое var TBase?
Что такое TBase.Var?
Зачем здесь взятие адреса?
Что такое TChild01.TBase?


← →
_Юрий   (2010-12-13 20:49) [10]


> Юрий Зотов ©   (13.12.10 17:01) [9]


> Что такое class var?


Это новый синтаксис - классовая переменная
по экземпляру на класс


> Как сделать class var TBase.Var уникальной для разных классов
> наследников => ( @TChild01.TBase.Var <> @TChild02.TBase.
> Var )


Никак.
Сделайте виртуальные классовые методы, которые возвращают в потомках другие экземпляры переменной


← →
_Юрий   (2010-12-13 20:51) [11]


> Сделайте виртуальные классовые методы, которые возвращают
> в потомках другие экземпляры переменной


А саму переменную соответственно уберите (если она долнга быть разной для разных потомков).


← →
v2 ©   (2010-12-14 16:26) [12]

Спасибо!
Немного поковырялся  :
[2]:
>Можно. (!)
В нестатическую процедуру класса передается скрытый параметр , который есть "тип объекта", - тесть можно вот так:

TBase =class;
TChild= class(TBase)

class procedure TBase.Load;
var T:Pointer;
begin
 T:=Self.Create;      // => TChild.Create  (!)
 ObjsList.Add(t);
end;

class procedure TBase.Fin;
var T:Pointer;
begin
 Save;
 …
T:= ObjsList[i];
(TObject(T) as Self).Free;    //=> TChild.Free( hidden ( T =>object Self) )  (!)
 ObjsList.Extract(T);
 …
end;

class procedure TChild.Init;
begin
...
Load;  // =>  TBase.Load
end;

[10]:
>Никак. (?)
Можно, но "руками", используя тот же class Self в качестве идентификатора текущего дочернего класса…

Попозже покажу где-то примерчик.


← →
Ega23 ©   (2010-12-14 16:51) [13]

(TObject(T) as Self).Free;
Бьюсь башкой об клаву...

Free - статичный метод TObject.


← →
v2 ©   (2010-12-14 17:46) [14]

[13]:
>Free - статичный метод TObject.
Кто сказал?

>> TChild.Free( hidden ( T =>object Self) )
Можно понимать как:
Вызов procedure TChild.Free; с передачей в нее скрытого параметра Т, который в самой Free будет признан за Self


← →
Игорь Шевченко ©   (2010-12-14 19:03) [15]


> Кто сказал?


объявление в System.pas


← →
Ega23 ©   (2010-12-14 21:53) [16]


> Кто сказал?

Пушкин.


> Вызов procedure TChild.Free; с передачей в нее скрытого
> параметра Т, который в самой Free будет признан за Self


Пипец.
Чувак, ты хинты и ворнинги читаешь? Или чукча не читатель, чукча писатель?


← →
v2 ©   (2010-12-14 23:35) [17]

[16]:
>хинты и ворнинги читаешь?

http://v2.nm.ru/toforum.rar

Отпишешься о хинтах.


← →
Ega23 ©   (2010-12-15 00:13) [18]

Я ещё не совсем из ума выжил, чтобы качать на свою машину неизвестно что от неизвестно кого.

Теперь, что касается v2 ©   (14.12.10 16:26) [12]

За такой код надо ноги отрывать. Мало того, что ты делаешь миллион ненужных действий в class procedure TBase.Fin;
Ты ещё внутри классового метода позволяешь обращаться к внешней сущности (я об ObjsList).
Класс - это чёрный ящик.Он ничего не должен знать об внешнем мире. Он оперирует только тем, что ему делегировали извне.


← →
Игорь Шевченко ©   (2010-12-15 00:44) [19]


> В нестатическую процедуру класса передается скрытый параметр
> , который есть "тип объекта",


Turbo Vision изобретаешь ?


← →
v2 ©   (2010-12-15 00:55) [20]

[18]:
>Я ещё не совсем из ума выжил, чтобы качать на свою машину неизвестно что от неизвестно кого.

А эту страничку не боишься открывать?

>За такой код ...
Да, я уже заметил, что тут достаточно резоголов и отрывоногов.

>..миллион..
Неохота в каждом дочернем классе один и тот же, в сущности, код прописывать.

>..сущности..
Код схематический, - от реального Вы отказались.

Я бы продолжил, для разминки, да спать охота.


← →
Германн ©   (2010-12-15 01:41) [21]


> А эту страничку не боишься открывать?

Тут скорее не боязнь, а отсутствие интереса. ИМХО


← →
Ega23 ©   (2010-12-15 07:37) [22]


> Неохота в каждом дочернем классе один и тот же, в сущности,
>  код прописывать.


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


← →
Anatoly Podgoretsky ©   (2010-12-15 09:03) [23]

> Ega23  (15.12.2010 00:13:18)  [18]

И еще в неизвестном, коммерческом формате. Нормальные люди соблюдают
нетикет, по которому это должен быть .zip, А такие вещи прямиком
отправляются в корзину.


← →
Ega23 ©   (2010-12-15 10:04) [24]


> коммерческом формате


rar - открытый формат. Вот программа WinRar - таки платная. Впрочем, как и WinZip. А сама dll - пожалуйста, со всеми API.


← →
Anatoly Podgoretsky ©   (2010-12-15 10:05) [25]

> Ega23  (15.12.2010 10:04:24)  [24]

А нафига мне покупать WinZip?


← →
Ega23 ©   (2010-12-15 10:18) [26]


> А нафига мне покупать WinZip?


А нафига мне покупать WinRar? Он, правда, и так купленый, типа, стандарт корпоративный, но я им не пользуюсь. Он у меня в TotalCommander уже прошит.


← →
Игорь Шевченко ©   (2010-12-15 10:19) [27]


> Он у меня в TotalCommander уже прошит


а TotalCommander ты тоже купил ?


← →
Ega23 ©   (2010-12-15 10:28) [28]


> а TotalCommander ты тоже купил ?


Да.


← →
Anatoly Podgoretsky ©   (2010-12-15 10:30) [29]

> Ega23  (15.12.2010 10:18:26)  [26]

Я к тому, что zip встроен в Виндоус, и это улучшеный WinZip


← →
Ega23 ©   (2010-12-15 10:55) [30]

Так он же и рар понимает? Или я ошибаюсь?
Впрочем неважно. Формат - бесплатный, есть все dll, есть все интерфейсы, есть описание формата. Визуальные программы, его использующие могут быть платными.


← →
Anatoly Podgoretsky ©   (2010-12-15 11:24) [31]

> Ega23  (15.12.2010 10:55:30)  [30]

Ошибаешься, RAR коммерческий формат, и автор никому не дает ни алгоритм ни
внутренний формат для записи, и Микрософт не покупало это, на фига им мало
распространеный формат, в осном известный на одной шестой суши. А вот
лицензию на WinZip она включила.

Автор предоставляет только консольную программ для распаковки, а нафиг оно
нужно, да рядовой пользователь раньше подохнет, чем сможет получить
результат, кроме того это посторонний продукт, в большинстве крупных фирм
просто глобальные политики не позволят им восспользоваться и никто не будет
покупать WinRar

Но я сообственно не про это, а про то что неэтично выкладывать в Интернете в
таком формате. Де факто стандарты для Интернет это .zip, .cab и .msi для
программ.
Например я даже и пытаться скачать и открыть делать не буду и многие также
поступают. Не умеешь соблюдать правила и мы тоже не будет твое читать.


← →
Ega23 ©   (2010-12-15 11:31) [32]


> ни внутренний формат для записи

Ну я спорить не буду, но мне кажется, что ты ошибаешься.
Насколько мне известно, алгоритм запатентован, но не скрыт.
Внутреннее описание тоже есть, вот: http://www.win-rar.ru/support/knowledge/detail.php?ID=1081


← →
Anatoly Podgoretsky ©   (2010-12-15 11:58) [33]

Ты считаешь, что этого описания достаточно для создания альтернативного архиватора. При это от обязанности покупать лицензию у владельца патента никто не отменял.

Иначе бы этих RAR архиваторов уже был бы вагон и маленькая тележка.
Ну и какое отношение это имеет к поведению в Интернет.


← →
Ega23 ©   (2010-12-15 12:05) [34]


> При это от обязанности покупать лицензию у владельца патента
> никто не отменял.


Тебе никто не мешает купить у владельца лицензию и встроить её в свою бесплатную тулзу.  :))))

> Ну и какое отношение это имеет к поведению в Интернет.

Не, с нетикетом я с тобой польностью солидарен. Моветон.


← →
Anatoly Podgoretsky ©   (2010-12-15 12:31) [35]

> Ega23  (15.12.2010 12:05:34)  [34]

Ты все время предлагаешь какие то подозрительные варианты. Ну их нафиг, а
мне же достаточно не нажимать на ссылку.


← →
v2 ©   (2010-12-15 13:02) [36]

[17]: http://v2.nm.ru/toforum.zip

[22]:
>Тебе уже показали, каким образом это делается.
Подслеп маленько, повторитесь, коли не сложно.


← →
v2 ©   (2010-12-15 13:04) [37]

http://v2.nm.ru/ToForum.zip


← →
Ega23 ©   (2010-12-15 13:05) [38]


> Подслеп маленько, повторитесь, коли не сложно.


[4]


>  http://v2.nm.ru/toforum.zip

Зря стараешься.


← →
Ega23 ©   (2010-12-15 13:06) [39]

Навеяло:
http://delphimaster.net/view/3-1292346820/


← →
v2 ©   (2010-12-15 13:59) [40]

[38]:
Код из [2] не работает,

[39]:
а в базах не силен я.


program df;

type
TDummy=class end;

TBase=class
 public
  constructor  Create;  virtual;
  procedure    Free;    virtual;
 public  class var fI   :Integer;
 public  class var Objs :array of Pointer;
 public  class procedure Load;
 public  class procedure Init;  virtual;
 public  class procedure Fin;   virtual;
end;

TChild=class(TBase)
 public
  fW         :Integer;
  procedure   Work;
  constructor Create; override;
  procedure   Free;   override;
 public  class procedure Init;  override;
 public  class procedure Fin;   override;

 public  class function Objs(i:Integer):TChild;
 public  class function ObjC:Integer;
end;

//-------------
constructor TBase.Create;
begin
Objs[fI]:=Self;
end;

class procedure TBase.Fin;
var
i:Integer;
begin
for i := Length(Objs)-1 downto 0 do
 (TDummy(Objs[i]) as Self).Free;
Finalize(Objs);
end;

procedure TBase.Free;
begin
inherited;
end;

class procedure TBase.Init;
begin
SetLength(Objs,10);
end;

class procedure TBase.Load;
var
i: Integer;
begin
for i := Length(Objs)-1 downto 0 do
 Self.Create;
end;

//------------
constructor TChild.Create;
begin
inherited;
Inc(fI);
end;

class procedure TChild.Fin;
begin
inherited;
end;

procedure TChild.Free;
begin
inherited;
end;

class procedure TChild.Init;
begin
fI:=0;
inherited;
Load;
end;

class function TChild.ObjC: Integer;
begin
Result:=Length(TBase.Objs);
end;

class function TChild.Objs(i: Integer): TChild;
begin
Result:=TBase.Objs[i];
end;

procedure TChild.Work;
begin
fW:=1;
end;
//---------------
var
i:Integer;
begin
TChild.Init;
for i:=TChild.ObjC-1 downto 0 do
 TChild.Objs(i).Work;
TChild.Fin;
end.


← →
Ega23 ©   (2010-12-15 14:03) [41]


> Код из [2] не работает,


Он работает.


> а в базах не силен я.


А дело не в базах, а в самом обсуждении. Там топикстартеру правильный ответ был даден сразу, но он упорно настаивал, что "всё и так работает, вот только если мышкой выбрать дату, но иногда не работает".

Мой тебе совет: забудь на время про классовые методы. Ты ещё до них не дорос.


← →
v2 ©   (2010-12-15 14:09) [42]

[41]:
>Он работает.

Приведи, пожалуйста, так как в [40], пример.


← →
Ega23 ©   (2010-12-15 14:14) [43]


> Приведи, пожалуйста, так как в [40], пример.


В [40] написан бред. Написан человеком, который "слышал звон, да не знает где он".
Есть мнение, что так, как в [40] тебе никто не напишет. Ни на этом форуме, ни на каком-либо другом.


← →
v2 ©   (2010-12-15 14:57) [44]

[43]:
> что так, как в [40]

Пожалуйста, так как в [40], простенький, но работоспособный пример, отображающий Ваш взгляд на решения вопроса.

Спасибо огромное, за Вашу помощь и участие.


← →
Ega23 ©   (2010-12-15 15:15) [45]


> отображающий Ваш взгляд на решения вопроса.


Я вопроса так и не услышал.
Можно ли создать (вызвать Create) дочерний объект из базового класса?
Да, можно. Как это делается - тебе уже написали. То, что требуется более конкретное уточнение - тебе тоже написали.
Если ты не умеешь задавать вопросы, не удивляйся ответу "42".


← →
v2 ©   (2010-12-15 16:23) [46]

[2]:
>Можно.
[45]:
>Я вопроса так и не услышал.

[2]:
>Но вопрос поставлен некорректно, требуется уточнение.
Какого рода уточнения Вам необходимы?

А если все-таки как-то можно, то приведите еще раз пример, потому как:

[4]:

>class procedure TBase.Load;
>begin
> with FAncestorClass.Create do  // E2124 Instance member "FAncestorClass" inaccessible here
> begin
>
> end;
>end;


← →
clickmaker ©   (2010-12-15 16:26) [47]

> А если все-таки как-то можно, то приведите еще раз пример,
> потому как:
>
> [4]:
>
> >class procedure TBase.Load;
> >begin
> > with FAncestorClass.Create do  // E2124 Instance member
> "FAncestorClass" inaccessible here
> > begin
> >
> > end;
> >end;


а где и как объявлено FAncestorClass?


← →
Ega23 ©   (2010-12-15 16:33) [48]


> А если все-таки как-то можно, то приведите еще раз пример,
>  потому как:


Очень просто. Это - классовый метод. Со всеми вытекающими последствиями.
А FAncestorClass - это приватное поле экземпляра класса.
Разницу чуешь?


← →
v2 ©   (2010-12-15 16:33) [49]

[4]:

>TBase = class (.....)
> class procedure Load;
> property AncestorClass: TAncestorClass read FAncestorClass write FAncestorClass;
>end;


← →
v2 ©   (2010-12-15 16:35) [50]

Re [48]

Чую, но как применить Ваш пример?


← →
Ega23 ©   (2010-12-15 16:51) [51]


> Чую, но как применить Ваш пример?


Заменить class procedure Load на просто procedure Load
Я опечатался.
А тебе пока забыть о существовании классовых методов и переменных. Сначала с обычными разберись.


← →
v2 ©   (2010-12-15 17:15) [52]

Ok, забыл о существовании классовых методов и переменных.

На Ваш пример [4] был такой отзыв:

[6]:
>> [4]: получаем TChild = class(TAncestor), а хотелось бы  TChild = сlass(TBase)

Вы это как-то прокомментируете?


← →
Ega23 ©   (2010-12-15 17:31) [53]


> Вы это как-то прокомментируете?


Я уже перестал понимать твой полёт мысли.
Изложи чётко и по пунктам: что ты хочешь получить.
Без собственных догадок, как это сделать, без кода. Чётко и словами.


← →
v2 ©   (2010-12-15 17:48) [54]

Спасибо за диалог, чуть позже (+4 часа) изложу суть вопроса.


← →
Ega23 ©   (2010-12-15 17:50) [55]


> Спасибо за диалог, чуть позже (+4 часа) изложу суть вопроса.


Хорошо, из дома вечером посмотрю.


← →
KSergey ©   (2010-12-15 22:14) [56]

> Игорь Шевченко ©   (15.12.10 10:19) [27]
> а TotalCommander ты тоже купил ?

Предлагаю спросить еще про налоги.


← →
v2 ©   (2010-12-16 01:15) [57]

Что есть:

Процедура, которой необходимо передать:
- имя файла;
- указатель на динамический массив целых со знаком (массив смещений);
- указатель на функцию обратного вызова (должна возвратить указатель на блок памяти);
- указатель,  будет передан в функцию обратного вызова.

Процедура открывает файл, проверяет наличие в нем данных и вызывает функцию обратного вызова, которая возвращает ей указатель, с которым дальше и работает процедура.
Примитивно, - копирует в (полученный указатель + смещениям с массива)  порции данных с файла. Если массив смещений иссяк, а данные в файле есть – продолжаем с процедуры обратного вызова, переместившись в начало массива смещений. Если же данных в файле больше нет, то и все.

Что нужно:

Как-то записывать все то, что напередавала функция обратного вызова процедуре

Как нужно:

Чтобы вся рутинная работа выполнялась подальше, а "мы" примазались бы к работягам, сказав, что функция теперь работает только на `нас` и имя файла теперь "наш", заполнили бы  массив смещений и инициировали вызов процедуры.
При этом таких "мы" может быть много, и они потом желают видеть только "своих" - записи-результаты функции.

ЗЫ
Словами получилось, четко - нет.

ЗЗЫ
Вот теперь это точно бред, … срочно спать.


← →
Германн ©   (2010-12-16 01:57) [58]


> v2 ©   (16.12.10 01:15) [57]

И при чём тут ООП?


← →
Servy ©   (2010-12-16 08:35) [59]


> Процедура, которой необходимо передать:
> - имя файла;
> - указатель на динамический массив целых со знаком (массив
> смещений);
> - указатель на функцию обратного вызова (должна возвратить
> указатель на блок памяти);
> - указатель,  будет передан в функцию обратного вызова.


Боюсь, вы в очередной раз изложили не задачу, а ваш способ решения. Хорошая задача могла бы звучать так:

Хочу уметь сохранять и загружать свои объекты, а именно значения их свойств, в файл. Требуется создать такой класс, чтобы при наследовании от него для сериализации объекта и загрузки его назад из файла требовался минимум усилий. На такой вопрос, к примеру, ответ в ветке был дан.

То, что вы излагаете содержит какие-то массивы, указатели и прочие сущности, а нафига вы хотите их нагородить - не разъяснено. До выяснения, боюсь вам тут никто не поможет.


← →
Ega23 ©   (2010-12-16 10:00) [60]


> Боюсь, вы в очередной раз изложили не задачу, а ваш способ
> решения.


Да не, задача изложена нормально. Процедура, указатель из callback-функции, буфер данных.
Это всё понятно и никакого отношения к ООП не имеет.


> Чтобы вся рутинная работа выполнялась подальше, а "мы" примазались
> бы к работягам, сказав, что функция теперь работает только
> на `нас`

Ну а вот дальше я нихрена не понял. Кто "мы"? Кого "нас"? Какие "работяги"?
Кто все эти люди?


← →
v2 ©   (2010-12-16 13:47) [61]

>Это всё понятно и никакого отношения к ООП не имеет
Так я и хочу все это дело завернуть в ООП.

>Ну а вот дальше я нихрена не понял. Кто "мы"? Кого "нас"?
Просили "без кода", - это, один и тот же тип объектов.

>Какие "работяги"?
Базовый класс.

>Хорошая задача могла бы звучать так:
>Хочу уметь сохранять и загружать свои объекты, а именно значения их свойств, в файл.
>Требуется создать такой класс, чтобы при наследовании от него для сериализации объекта и загрузки его назад из файла
>требовался минимум усилий.

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

>На такой вопрос, к примеру, ответ в ветке был дан.
Вы говорите о "[9]: См. справку по классу TPersistent." ?

Но у меня уже есть "мое, родное", и работает оно. И уже завернуто в ООП.
И мой ответ на мой вопрос [1] такой:
Self.Create; для не статичного классового метода

Но код мой [40] мастерами не признан был.

Вот и вопрос:
Как же такие ("Хорошая задача") задачи решают мастера и что не так в коде [40] ?


← →
Ega23 ©   (2010-12-16 14:05) [62]

Я уже было понадеялся, что началось адекватное обсуждение.
А нет. Опять бредни про ООП, опять "статичные классовые методы", опять "Self.Create".
Лично мне - уже надоело. Даю последнюю попытку: объясни, что за задачу ты решаешь. Простыми словами, без своих догадок, как это надо сделать.


← →
v2 ©   (2010-12-16 14:48) [63]

>Я уже было понадеялся, что началось адекватное обсуждение.
Я тоже.

>"статичные классовые методы"
поправка:
>>не статичного классового метода
: классового метода без спецификатора static;

>> Self.Create;
работает, и решает задачу, а именно
>Простыми словами:
Надо вызвать конструктор наследника из базового класса.

Ваши комментарии.


← →
Ega23 ©   (2010-12-16 15:09) [64]

Попытка использована.
За сим - откланиваюсь.


← →
v2 ©   (2010-12-16 15:41) [65]

>За сим - откланиваюсь.
Увы, рассказали, что все плохо, ничем не помогли, и убежали.

_Юрий, спасибо!

> Сделайте виртуальные классовые методы, которые возвращают
> в потомках другие экземпляры переменной

Натолкнуло на мысль, которая помогла найти решение, хотя непосредственно Вашим советом и не воспользовался.


← →
Inovet ©   (2010-12-16 15:50) [66]

> [65] v2 ©   (16.12.10 15:41)
> Увы, рассказали, что все плохо, ничем не помогли, и убежали.

Так ты ничего не рассказал

> [62] Ega23 ©   (16.12.10 14:05)
> объясни, что за задачу ты решаешь. Простыми словами, без
> своих догадок, как это надо сделать.

но снова про то как ты это делаешь

> [63] v2 ©   (16.12.10 14:48)
> Надо вызвать конструктор наследника из базового класса.


← →
v2 ©   (2010-12-16 16:06) [67]

Servy, Спасибо! Воспользуюсь Вашим постом.

>Требуется создать такой класс, чтобы при наследовании от него для сериализации объекта и загрузки его назад из файла
>требовался минимум усилий.


[63]:
>но снова про то как ты это делаешь
>> Надо вызвать конструктор наследника из базового класса.
Да, и в решении такой задачи меня смущало именно это.

А как бы Вы решали такую задачу?


← →
icWasya ©   (2010-12-16 16:21) [68]

>А как бы Вы решали такую задачу?
Ну так задачу ты и неозвучил.


← →
Ega23 ©   (2010-12-16 16:21) [69]

Во, вот теперь всё ясно. Задачка стандартная, по сериализации различных объектов. Встречается довольно регулярно. Решается тоже довольно просто.
Только вот незадача: последняя попытка была использована.


← →
Anatoly Podgoretsky ©   (2010-12-16 16:56) [70]

> icWasya  (16.12.2010 16:21:08)  [68]

Ну что вы пристали, ну не может он.


← →
v2 ©   (2010-12-16 17:01) [71]

[0]:
>>Можно ли создать (вызвать Create) дочерний объект из базового класса?

[2]:

>Можно. Но вопрос поставлен некорректно, требуется уточнение.


[3]:
>> Базовый класс должен автоматизировать создание дочерних объектов из потока входящих данных

[4]:


>TChild = class (TAncestor)
>public
> constructor Create; override;
>end;

>TBase = class (.....)
> class procedure Load;
> property AncestorClass: TAncestorClass read FAncestorClass write >FAncestorClass;
>end;



[6]:
>>получаем TChild = class(TAncestor), а хотелось бы  TChild = сlass(TBase)

[22]:
>Тебе уже показали, каким образом это делается.

[69]:
>Во, вот теперь всё ясно. Задачка стандартная, по сериализации различных объектов.

Прошу прощения за настойчивость, прокомментируйте кто-нибудь код (D2009) из поста [40]. Спасибо.


← →
Amoeba_   (2010-12-16 17:05) [72]

В итоге имеем очередную сагу об X, Y и Z:
http://www.gunsmoker.ru/2008/10/x-y-z.html


← →
Ega23 ©   (2010-12-16 17:15) [73]


> В итоге имеем очередную сагу об X, Y и Z:

Да, в яблочко.


← →
v2 ©   (2010-12-16 17:22) [74]

Re: [72],[73]
Вам, наверное, здесь пряники раздают за количество постов, или как.


← →
Юрий Зотов ©   (2010-12-16 19:28) [75]


> v2 ©


Если Вам нужна всего лишь сериализация объектов, то зачем изобретать велосипед, когда в Delphi она есть уже готовая?

Кроме того, Вы идете не только нерациональным, но еще и заведомо неверным путем - та сериализация, которую Вы хотите сделать работать не будет, потому что среди полей объекта запросто могут быть длинные строки, динамические масссивы, объекты или любые другме указатели. Сериализовывать такие поля по принципу смещение+размер просто бессмысленно.

Не вдумались Вы в [9] - а зря, сами себя на три дня наказали.



Страницы: 1 2 вся ветка

Скачать: CL | DM;



Память: 0.66 MB
Время: 0.005 c
3-1253799297
N/O
2009-09-24 17:34
2011.03.06
vopros po TClientDataSet


2-1292567745
RUu
2010-12-17 09:35
2011.03.06
еще раз по поводу соответствия типов в условии


15-1290680568
И. Павел
2010-11-25 13:22
2011.03.06
Фриланс на Delphi и C++Builder


2-1291998675
TComponent
2010-12-10 19:31
2011.03.06
Программно передвинуть TSplitter


2-1292409400
RUu
2010-12-15 13:36
2011.03.06
несоответствие типов




   Наверх