Текущий архив: 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
//Íåèçâåñòíûé âèä âûçûâàåìîãî ñïðàâî÷íèêè.
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
//Íåèçâåñòíûé âèä âûçûâàåìîãî ñïðàâî÷íèêè.
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 = "Íåèçâåñòíûé ñïðàâî÷íèê";
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
//Íåèçâåñòíûé âèä âûçûâàåìîãî ñïðàâî÷íèêè.
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.58 MB
Время: 0.048 c