![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ООП
v2 © (2010-12-13 03:10:00)Можно ли создать (вызвать Create) дочерний объект из базового класса?
Ega23 (2010-12-15 17:50:00) [21]
> Спасибо за диалог, чуть позже (+4 часа) изложу суть вопроса.
Хорошо, из дома вечером посмотрю.
v2 (2010-12-15 17:48:00) [22]Спасибо за диалог, чуть позже (+4 часа) изложу суть вопроса.
Ega23 (2010-12-15 17:31:00) [23]
> Вы это как-то прокомментируете?
Я уже перестал понимать твой полёт мысли.
Изложи чётко и по пунктам: что ты хочешь получить.
Без собственных догадок, как это сделать, без кода. Чётко и словами.
v2 (2010-12-15 17:15:00) [24]Ok, забыл о существовании классовых методов и переменных.
На Ваш пример [4] был такой отзыв:
[6]:
>> [4]: получаем TChild = class(TAncestor), а хотелось бы TChild = сlass(TBase)
Вы это как-то прокомментируете?
Ega23 (2010-12-15 16:51:00) [25]
> Чую, но как применить Ваш пример?
Заменить class procedure Load на просто procedure Load
Я опечатался.
А тебе пока забыть о существовании классовых методов и переменных. Сначала с обычными разберись.
v2 (2010-12-15 16:35:00) [26]Re [48]
Чую, но как применить Ваш пример?
Ega23 (2010-12-15 16:33:00) [27]
> А если все-таки как-то можно, то приведите еще раз пример,
> потому как:
Очень просто. Это - классовый метод. Со всеми вытекающими последствиями.
А FAncestorClass - это приватное поле экземпляра класса.
Разницу чуешь?
v2 (2010-12-15 16:33:00) [28][4]:
>TBase = class (.....)
> class procedure Load;
> property AncestorClass: TAncestorClass read FAncestorClass write FAncestorClass;
>end;
clickmaker (2010-12-15 16:26:00) [29]> А если все-таки как-то можно, то приведите еще раз пример,
> потому как:
>
> [4]:
>
> >class procedure TBase.Load;
> >begin
> > with FAncestorClass.Create do // E2124 Instance member
> 'FAncestorClass' inaccessible here
> > begin
> >
> > end;
> >end;
а где и как объявлено FAncestorClass?
v2 (2010-12-15 16:23:00) [30][2]:
>Можно.
[45]:
>Я вопроса так и не услышал.
[2]:
>Но вопрос поставлен некорректно, требуется уточнение.
Какого рода уточнения Вам необходимы?
А если все-таки как-то можно, то приведите еще раз пример, потому как:
[4]:
>class procedure TBase.Load;
>begin
> with FAncestorClass.Create do // E2124 Instance member 'FAncestorClass' inaccessible here
> begin
>
> end;
>end;
Ega23 (2010-12-15 15:15:00) [31]
> отображающий Ваш взгляд на решения вопроса.
Я вопроса так и не услышал.
Можно ли создать (вызвать Create) дочерний объект из базового класса?
Да, можно. Как это делается - тебе уже написали. То, что требуется более конкретное уточнение - тебе тоже написали.
Если ты не умеешь задавать вопросы, не удивляйся ответу "42".
v2 (2010-12-15 14:57:00) [32][43]:
> что так, как в [40]
Пожалуйста, так как в [40], простенький, но работоспособный пример, отображающий Ваш взгляд на решения вопроса.
Спасибо огромное, за Вашу помощь и участие.
Ega23 (2010-12-15 14:14:00) [33]
> Приведи, пожалуйста, так как в [40], пример.
В [40] написан бред. Написан человеком, который "слышал звон, да не знает где он".
Есть мнение, что так, как в [40] тебе никто не напишет. Ни на этом форуме, ни на каком-либо другом.
v2 (2010-12-15 14:09:00) [34][41]:
>Он работает.
Приведи, пожалуйста, так как в [40], пример.
Ega23 (2010-12-15 14:03:00) [35]
> Код из [2] не работает,
Он работает.
> а в базах не силен я.
А дело не в базах, а в самом обсуждении. Там топикстартеру правильный ответ был даден сразу, но он упорно настаивал, что "всё и так работает, вот только если мышкой выбрать дату, но иногда не работает".
Мой тебе совет: забудь на время про классовые методы. Ты ещё до них не дорос.
v2 (2010-12-15 13:59:00) [36][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 13:06:00) [37]Навеяло:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=1&id=1292346820&p=1
Ega23 (2010-12-15 13:05:00) [38]
> Подслеп маленько, повторитесь, коли не сложно.
[4]
> http://v2.nm.ru/toforum.zip
Зря стараешься.
v2 (2010-12-15 13:04:00) [39]http://v2.nm.ru/ToForum.zip
v2 (2010-12-15 13:02:00) [40][17]: http://v2.nm.ru/toforum.zip
[22]:
>Тебе уже показали, каким образом это делается.
Подслеп маленько, повторитесь, коли не сложно.