Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.03.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.67 MB
Время: 0.005 c
2-1292161193
Ux
2010-12-12 16:39
2011.03.06
Запрет запуска


15-1290612541
alexdn_
2010-11-24 18:29
2011.03.06
Почта


15-1290383176
Юрий Зотов
2010-11-22 02:46
2011.03.06
Еще один шахматный этюд


2-1292171520
v_a_belousov
2010-12-12 19:32
2011.03.06
Отправка письма


2-1291988028
Scott Storch
2010-12-10 16:33
2011.03.06
полупрозрачные края формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский