Форум: "Начинающим";
Текущий архив: 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