Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.29;
Скачать: CL | DM;

Вниз

override or overload ?   Найти похожие ветки 

 
User1   (2008-05-12 16:02) [0]

...
 public
   { Public declarations }
   constructor Create(AOwner: TComponent); overload;
 end;


Собственно вопрос... :o)


 
Сергей М. ©   (2008-05-12 16:06) [1]

= class(?)

Собссно контрвопрос)


 
Palladin ©   (2008-05-12 16:11) [2]

вопрос какой то странный, я его собственно и не вижу, в чем он?

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

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

и в чем"же твой вопрос после ликбеза?


 
oxffff ©   (2008-05-12 16:31) [3]


> User1   (12.05.08 16:02)  


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

2. Если инстранцировать будешь через  Application.CreateForm(TForm1, Form1), тогда Override, в случае необходимости вызова твоего конструктора.


 
Kolan ©   (2008-05-12 16:37) [4]

> вопрос какой то странный

Ну, почему не спросить stdcall или reitroduce, сабжевые слова просто похожи, отсюда и вопрос что ли ....


 
User1   (2008-05-12 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.

Непойму почему...


 
Сергей М,   (2008-05-12 19:02) [6]


> да, class


ЧЕЙ наследник этот твой класс ?


 
Юрий Зотов ©   (2008-05-12 19:05) [7]

> User1   (12.05.08 18:57) [5]

Вы не поняли. Сергей спрашивал, от какого класса наследуется Ваш класс. Точнее, нужно знать объявление его конструктора - от этого зависит ответ на Ваш вопрос.


 
User1   (2008-05-12 19:06) [8]


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

TForm


 
User1   (2008-05-12 19:07) [9]

Дочернее окно. MDIChild


 
Юрий Зотов ©   (2008-05-12 19:13) [10]

Тогда override.


 
User1   (2008-05-12 19:17) [11]


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

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

Declaration of "Create" differs from previous declaration.


 
User1   (2008-05-12 19:23) [12]

Прошу прощения ребята !
Нашел ошибку, а скорее недоучет.

Дело в том, я забыл обозначить, что передается еще один параметр ARec:
constructor Create(AOwner: TComponent; ARec: THandBook); overload; а в этом случае поможет только overload.

Вопрос снят !


 
User1   (2008-05-12 19:24) [13]

Потому и соответствующее сообщение :
Declaration of "Create" differs from previous declaration.


 
tesseract ©   (2008-05-12 20:26) [14]

overload - полиморфизм, для разных параметров в методе.
override - переопределяем сам метод.
reintroduce - просто убирает предупреждение компилятора.


> Declaration of "Create" differs from previous declaration.


Ессно ты же параметры у Create меняешь - этого лучше не делать. inherited конструктор вызвать не забудь только.


 
User1   (2008-05-12 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.


 
Игорь Шевченко ©   (2008-05-12 20:32) [16]

Чему вас только Пачеко учил...


 
User1   (2008-05-12 20:36) [17]


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

И чему же... ? :o)


 
tesseract ©   (2008-05-12 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
    //&#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;


Какой Close в OnCreate ? И в OnShow тоже нельзя. Проверяй перед созданием формы, а не в ней. Или Error взводи.


 
User1   (2008-05-12 20:40) [19]


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

Честно, налобал даже не проверял.... :o) просто "мысль гения" пришла, а сому "последовательность" shbUnknown даже ниразу не вызывал... :o)))


 
Юрий Зотов ©   (2008-05-12 20:44) [20]

> tesseract ©   (12.05.08 20:26) [14]

Overload - НЕ полиморфизм (а перегрузка). А вот override - это как раз полиморфизм и есть.


 
Сергей М,   (2008-05-12 20:45) [21]


> налобал даже не проверял


Да уж..
Тело ф-ции CreateHandBook - шедевр, достойный истинного "лобуха")


 
User1   (2008-05-12 20:46) [22]


> Юрий Зотов ©   (12.05.08 20:44) [20]

Не предал значения. Совершенно верно !


 
tesseract ©   (2008-05-12 20:53) [23]


> Overload - НЕ полиморфизм (а перегрузка).


В общем-то да. overload не перекрывает сам метод. Определение "полиморфизма" само по себе туманновато.


 
User1   (2008-05-12 21:00) [24]


> tesseract ©   (12.05.08 20:53) [23]


Это да. :o)

http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_%D0%B2_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество методов».

Полиморфизм — один из трех важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией и наследованием).

Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение. Внешне общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (типами аргументов и результатов). Внутренняя общность есть одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (функций, операций).


 
Юрий Зотов ©   (2008-05-12 21:24) [25]

> tesseract ©   (12.05.08 20:53) [23]

> Определение "полиморфизма" само по себе туманновато.

По смыслу - разное поведение одного и того же метода в зависимости от класса. По сути - всего лишь косвенная адресация. Ничего туманного.


 
tesseract ©   (2008-05-12 21:33) [26]


> По смыслу - разное поведение одного и того же метода в зависимости
> от класса.


Определение туманно. Как работает, ясно конечно.


 
main ©   (2008-05-13 02:06) [27]


> tesseract ©   (12.05.08 21:33) [26]


Ну хватит оправдываться. Все ошибаются.
:)


 
Германн ©   (2008-05-13 04:16) [28]


> tesseract ©   (12.05.08 21:33) [26]
>
>
> > По смыслу - разное поведение одного и того же метода в
> зависимости
> > от класса.
>
>
> Определение туманно. Как работает, ясно конечно.

Очень напомнило "Координаты чудес" Шэкли. :)


 
User1   (2008-05-13 06:56) [29]


> Сергей М,   (12.05.08 20:45) [21]

Почему ? :o)


 
Сергей М. ©   (2008-05-13 08:28) [30]

function CreateHandBook...
begin
if Assigned(fHandBook) then
..
    fHandBook.Free //разрушение объекта, в fHandBook остается мусор (1)
..
try
  if not Assigned(fHandBook) then // в случае (1) уловие будет ложным
    fHandBook := TfHandBook.Create(AOwner, ARec); //и эта строчка никогда не будет выполнена (2)
except
  fHandBook.Free; // в случае исключения при выполнении (2) разрушение заведомо несозданного объекта лишено всякого смысла
  fHandBook := nil; // равно как лишена смысла и эта строчка
end;
end;


 
User1   (2008-05-13 08:35) [31]


> Сергей М. ©   (13.05.08 08:28) [30]

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
    begin
      fHandBook.Free;
      fHandBook := nil;
    end
  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;
end;
end;


?


 
Сергей М. ©   (2008-05-13 08:59) [32]

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

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


 
XentaAbsenta ©   (2008-05-13 09:42) [33]

Удалено модератором


 
User1   (2008-05-13 10:57) [34]

Кто-то писал справочники такого вида, как я пытаюсь написать ?
Если да, то кто, что посоветует по этому поводу...

Заранее спасибо !


 
Сергей М. ©   (2008-05-13 11:00) [35]

Какого "такого" ?


 
User1   (2008-05-13 11:06) [36]


> Сергей М. ©   (13.05.08 11:00) [35]

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 = "&#205;&#229;&#232;&#231;&#226;&#229;&#241;&#242;&#237;&#251;&#233; &#241;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234;";
SRequisite = "&#209;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234; &#240;&#229;&#234;&#226;&#232;&#231;&#232;&#242;&#251; &#239;&#240;&#229;&#228;&#239;&#240;&#232;&#255;&#242;&#232;&#255;";
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
{ &#207;&#238;&#228;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#229; &#228;&#238;&#239;&#238;&#235;&#237;&#232;&#242;&#229;&#235;&#252;&#237;&#251;&#  245; &#236;&#238;&#228;&#243;&#235;&#229;&#233;. }
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.


 
Игорь Шевченко ©   (2008-05-13 11:15) [37]

Все выбросить на помойку клавишей Shift+Delete

Читать Тейксейру с Пачеко


 
Сергей М. ©   (2008-05-13 11:20) [38]


> User1   (13.05.08 11:06) [36]


Это не справочник, это просто лобуховая декларация и реализация некоего класса формы)


 
User1   (2008-05-13 12:30) [39]


> Сергей М. ©   (13.05.08 11:20) [38]

А что же догда понимать под справочником программы ?

Тогда объясните как реализовать "гибкий справочник" для работы с некоторыми таблицами в БД ?...


 
Сергей М. ©   (2008-05-13 12:40) [40]


> что же догда понимать под справочником программы ?


Это тебя надо спросить, что ты под этим понимаешь)


> как реализовать "гибкий справочник"


Какой такой "гибкий" ?)



Страницы: 1 2 3 4 5 6 вся ветка

Текущий архив: 2008.06.29;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.038 c
2-1212331409
snake-as
2008-06-01 18:43
2008.06.29
Использовать слово из TWebBrowser


2-1212484394
D@nger
2008-06-03 13:13
2008.06.29
MDI окно и хэндл


2-1212410997
zensan
2008-06-02 16:49
2008.06.29
Множественное наследование


2-1212329213
BasUrban
2008-06-01 18:06
2008.06.29
Поверх всего


15-1210843226
User1
2008-05-15 13:20
2008.06.29
Приложения написанные на Delphi