Конференция "Прочее" » override or overload ?
 
  • User1 (12.05.08 16:02) [0]
    ...
     public
       { Public declarations }
       constructor Create(AOwner: TComponent); overload;
     end;



    Собственно вопрос... :o)
  • Сергей М. © (12.05.08 16:06) [1]
    = class(?)

    Собссно контрвопрос)
  • Palladin © (12.05.08 16:11) [2]
    вопрос какой то странный, я его собственно и не вижу, в чем он?

    overload - с помощью этой директивы ты можешь объявлять одноименные методы/процедуры с разным набором параметров

    override - эта деректива перекрывает реализацию виртуального/динамического метода/конструктора/деструктора/(да и мало ли чего) родительского класса и обозначает, что у наследника она будет своя

    и в чем'же твой вопрос после ликбеза?
  • oxffff © (12.05.08 16:31) [3]

    > User1   (12.05.08 16:02)  


    1. Без разницы, если инстранцировать будешь как TForm1.Create.

    2. Если инстранцировать будешь через  Application.CreateForm(TForm1, Form1), тогда Override, в случае необходимости вызова твоего конструктора.
  • Kolan © (12.05.08 16:37) [4]
    > вопрос какой то странный

    Ну, почему не спросить stdcall или reitroduce, сабжевые слова просто похожи, отсюда и вопрос что ли ....
  • User1 (12.05.08 18:57) [5]
    Сори на писал только сейчас смог к ветке вернуться....


    > Сергей М. ©   (12.05.08 16:06) [1]


    да, class
    > Palladin ©   (12.05.08 16:11) [2]

    > override - эта деректива перекрывает реализацию виртуального/динамического
    > метода/конструктора/деструктора/(да и мало ли чего) родительского
    > класса и обозначает, что у наследника она будет своя


    Совершенно верно ! :o)

    Только не найду ошибки, когда делаю override вылетает вот что:

    Declaration of 'Create' differs from previous declaration.



    Непойму почему...
  • Сергей М, (12.05.08 19:02) [6]

    > да, class


    ЧЕЙ наследник этот твой класс ?
  • Юрий Зотов © (12.05.08 19:05) [7]
    > User1   (12.05.08 18:57) [5]

    Вы не поняли. Сергей спрашивал, от какого класса наследуется Ваш класс. Точнее, нужно знать объявление его конструктора - от этого зависит ответ на Ваш вопрос.
  • User1 (12.05.08 19:06) [8]

    > Юрий Зотов ©   (12.05.08 19:05) [7]

    TForm
  • User1 (12.05.08 19:07) [9]
    Дочернее окно. MDIChild
  • Юрий Зотов © (12.05.08 19:13) [10]
    Тогда override.
  • User1 (12.05.08 19:17) [11]

    > Юрий Зотов ©   (12.05.08 19:13) [10]

    Как раз при подстановке этого оператора и выскакивает:

    Declaration of 'Create' differs from previous declaration.

  • User1 (12.05.08 19:23) [12]
    Прошу прощения ребята !
    Нашел ошибку, а скорее недоучет.

    Дело в том, я забыл обозначить, что передается еще один параметр
    ARec

    :
    constructor Create(AOwner: TComponent; ARec: THandBook); overload

    ; а в этом случае поможет только
    overload

    .

    Вопрос снят !
  • User1 (12.05.08 19:24) [13]
    Потому и соответствующее сообщение :
    Declaration of 'Create' differs from previous declaration.
  • tesseract © (12.05.08 20:26) [14]
    overload - полиморфизм, для разных параметров в методе.
    override - переопределяем сам метод.
    reintroduce - просто убирает предупреждение компилятора.


    > Declaration of 'Create' differs from previous declaration.


    Ессно ты же параметры у Create меняешь - этого лучше не делать. inherited конструктор вызвать не забудь только.
  • User1 (12.05.08 20:30) [15]

    > inherited конструктор вызвать не забудь только.

    C этим норм.

    А вообще суечусь для справочника.

    Тип такого чтот:

    unit uHandBook;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, Buttons, ExtCtrls, ComCtrls, ToolWin, DBCtrls, Grids, DBGridEh,
     DB, StdCtrls;

    type

    { TfHandBook }

     TShowHandBook = (shbUnknown, shbRequisite, shbEmployee, shbJobTitle, shbUser, shbRole,
       shbLog, shbPlace, shbPoint, shbTpPoint, shbStreet, shbTpStreet, shbHome,
       shbTpHome, shbPost, shbManagement, shbProperty, shbOtherRem, shbEntrance,
       shbApartment, shbRoom, shbTpRoom);

     PHandBook = ^THandBook;
     THandBook = packed record
       ShowType: TShowHandBook;
       case Integer of
         0: (
           GoToIndex: Integer);
     end;

     TfHandBook = class(TForm)
       pnl: TPanel;
       sBtnClose: TSpeedButton;
       sBtnPrint: TSpeedButton;
       sBtnHelp: TSpeedButton;
       tb: TToolBar;
       sbInfo: TStatusBar;
       sb: TStatusBar;
       nv: TDBNavigator;
       tSprt1: TToolButton;
       tBtnFilter: TToolButton;
       grd: TDBGridEh;
       ds: TDataSource;
       procedure FormCreate(Sender: TObject);
       procedure FormShow(Sender: TObject);
       procedure FormPaint(Sender: TObject);
       procedure FormActivate(Sender: TObject);
       procedure FormResize(Sender: TObject);
       procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
       procedure FormClose(Sender: TObject; var Action: TCloseAction);
       procedure FormDeactivate(Sender: TObject);
       procedure FormHide(Sender: TObject);
       procedure FormDestroy(Sender: TObject);
     private
       { Private declarations }
       FRec: THandBook;
     public
       { Public declarations }
       constructor Create(AOwner: TComponent; ARec: THandBook); overload;
     end;

    function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;

    resourcestring
     SUnknown = 'Íåèçâåñòíûé ñïðàâî÷íèê';
     SRequisite = 'Ñïðàâî÷íèê ðåêâèçèòû ïðåäïðèÿòèÿ';
     SEmployee = '';
     SJobTitle = '';
     SUser = '';
     SRole = '';
     SLog = '';
     SPlace = '';
     SPoint = '';
     STpPoint = '';
     SStreet = '';
     STpStreet = '';
     SHome = '';
     STpHome = '';
     SPost = '';
     SManagement = '';
     SProperty = '';
     SOtherRem = '';
     SEntrance = '';
     SApartment = '';
     SRoom = '';
     STpRoom = '';

    var
     fHandBook: TfHandBook;

    implementation

    uses
    { Ïîäêëþ÷åíèå äîïîëíèòåëüíû&# 245; ìîäóëåé. }
     uDm, IniFiles, uConstants, uDbs;

    {$R *.dfm}

    function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
    begin
     if Assigned(fHandBook) then
       if (fHandBook.FRec.ShowType <> ARec.ShowType) or
         (fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
         fHandBook.Free
       else
         if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
           fHandBook.WindowState := wsNormal
         else
           fHandBook.Show;

     Result := True;
     try
       if not Assigned(fHandBook) then
         fHandBook := TfHandBook.Create(AOwner, ARec);
     except
       Result := False;
       fHandBook.Free;
       fHandBook := nil;
     end;
    end;

    constructor TfHandBook.Create(AOwner: TComponent; ARec: THandBook);
    begin
     inherited Create(AOwner);
     FRec := ARec;
     case FRec.ShowType of
       shbUnknown:
         begin
           Close;
         end;
       shbRequisite:
         begin
           Caption := SRequisite;
           ds.DataSet := dm.qRequisite;
         end;
     else
       begin
         //&#205;&#229;&#232;&#231;&#226;&#229;&#241;&#242;&#237;&#251;&#233; &#226;&#232;&#228; &#226;&#251;&#231;&#251;&#226;&#224;&#229;&#236;&#238;&#227;&#238; &#241;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234;&#232;.
       end;
     end;
    end;

    procedure TfHandBook.FormCreate(Sender: TObject);
    begin
     if OpenDataSet(ds.DataSet) then
       begin
         //
       end
     else
       begin
         //
       end;
    end;

    procedure TfHandBook.FormShow(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormPaint(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormActivate(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormResize(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormCloseQuery(Sender: TObject;
     var CanClose: Boolean);
    begin
     //
    end;

    procedure TfHandBook.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     //
    end;

    procedure TfHandBook.FormDeactivate(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormHide(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormDestroy(Sender: TObject);
    begin
     //
    end;

    end.

  • Игорь Шевченко © (12.05.08 20:32) [16]
    Чему вас только Пачеко учил...
  • User1 (12.05.08 20:36) [17]

    > Игорь Шевченко ©   (12.05.08 20:32) [16]

    И чему же... ? :o)
  • tesseract © (12.05.08 20:36) [18]

    begin
    inherited Create(AOwner);
    FRec := ARec;
    case FRec.ShowType of
      shbUnknown:
        begin
          Close;
        end;
      shbRequisite:
        begin
          Caption := SRequisite;
          ds.DataSet := dm.qRequisite;
        end;
    else
      begin
        //Íåèçâåñòíûé âèä âûçûâàåìîãî ñïðàâî÷íèêè.
      end;
    end;
    end;


    Какой Close в OnCreate ? И в OnShow тоже нельзя. Проверяй перед созданием формы, а не в ней. Или Error взводи.
  • User1 (12.05.08 20:40) [19]

    > tesseract ©   (12.05.08 20:36) [18]

    Честно, налобал даже не проверял.... :o) просто "мысль гения" пришла, а сому "последовательность" shbUnknown даже ниразу не вызывал... :o)))
 
Конференция "Прочее" » override or overload ?
Есть новые Нет новых   [134435   +13][b:0.001][p:0.005]