Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ООП


Страницы:   1 2 3 4

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]:
>Тебе уже показали, каким образом это делается.
Подслеп маленько, повторитесь, коли не сложно.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо