Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2011, 09:22   #11
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

я бы использовал перегрузку aftercontruction

Tobject.afterconstruction F1
Цитата:
Responds after the last constructor has executed.

Delphi syntax:

procedure AfterConstruction; virtual;

C++ syntax:

virtual void __fastcall AfterConstruction();

Description

AfterConstruction is called automatically after the object’s last constructor has executed. Do not call it explicitly in your applications.

The AfterConstruction method implemented in TObject does nothing. Override this method when creating a class that takes some action after the object is created. For example, TCustomForm overrides AfterConstruction to generate an OnCreate event.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 05.05.2011, 09:26   #12
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
так что всетаки не нужно писать там override
К сожалению, нужно.
С конструктором несколько сложнее, чем может показаться на первый взгляд.
Попробуйте убрать слово override в объявлении конструктора в приведенном выше примере (пост #4).
Наш конструктор вызываться НЕ БУДЕТ.
А ведь именно вызов конструктора позволяет производить дополнительные манипуляции, которые понадобились автору при создании фрейма. Так что без указания наследования в этом случае не обойтись.

Предположение такое (шибко в теорию не вдавался). К моменту вызова конструктора наследника, вирт. таблица еще толком не создана (ссылок на методы нет), а вызывать конструкторы предков надо, вот Борланд и "выкрутился"
И выкрутился так, что конструктор внешне выглядит как наследуемый метод. Недаром же он обозван специальным словом.
Может я в деталях и ошибаюсь, но то что конструктор без слова override пустое место в сырцах - это факт.

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

Последний раз редактировалось Прик; 05.05.2011 в 09:51.
Прик вне форума Ответить с цитированием
Старый 05.05.2011, 09:50   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

копнул глубже, такая перегрузка нужна при создании форм методом Application.CreateForm и аналогичным методом
Код:
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
  Instance: TComponent;
begin
  Instance := TComponent(InstanceClass.NewInstance);
  TComponent(Reference) := Instance;
  try
    Instance.Create(Self);//вот он вызов виртуального конструктора(и он реально виртуальный тут)
  except
    TComponent(Reference) := nil;
    raise;
  end;
  if (FMainForm = nil) and (Instance is TForm) then
  begin
    TForm(Instance).HandleNeeded;
    FMainForm := TForm(Instance);
  end;
end;
Цитата:
Конструктор вызываться НЕ БУДЕТ.
при явном создании объекта будет. а вот при использовании некой полиморфности нет.
Цитата:
К моменту вызова конструктора наследника, вирт. таблица еще толком не создана (ссылок на методы нет)
VMT формируется в статике еще на этапе компиляции.
Цитата:
evg_m, если Борланд не "разрешает" вызвать AfterConstruction явно
а зачем его вызывать? он сам вызовется когда надо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DataModule.OnCreate Diablas Общие вопросы Delphi 0 02.08.2010 18:12
frame blackstersl Общие вопросы Delphi 1 18.09.2008 16:54
Frame in frame avalon8 Работа с сетью в Delphi 1 31.07.2008 16:14
Проверка событий в onCreate Михаил Юрьевич Общие вопросы Delphi 5 12.06.2008 13:17
Frame Zeraim Общие вопросы Delphi 1 25.05.2008 23:17