Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-04-2010
Avatar de flystar
flystar flystar is offline
Miembro
 
Registrado: jul 2006
Posts: 184
Poder: 18
flystar Va por buen camino
Question ¿Como se declara correctamente un constructor?

Hola Amigos, solicito ayuda a alguna alma caritativa que me puedas orientar en lo siguiente, hice una unidad nueva para contener unas funciones de trabajo para mis proyectos, tengo un procedimiento que puede recibir unos parametros, sin embargo estoy viendo que en ocaciones es necesario que reciba menos parametros de lo que normalmente recibiria, y para tal caso tengo pensado declarar varias veces ese mismo procedimiento pero con diferentes cantidad de parametros, supongo que para eso son los constructores entre otras cosas o no?

Total para eso tengo entendido que debes cambiar la palabra "procedure" por "constructor" pero si lo hago me sale error de sintaxis:

[Error] UFunciones.pas(12): Undeclared identifier: 'ControlBarraDeBotonesAltasCambiasEdicion'
[Fatal Error] AdminCountier1.dpr(8): Could not compile used unit 'UFunciones.pas'


vamos a suponer que quiero declarar 2 veces el procedimiento
ControlBarraDeBotonesAltasCambiasEdicion pero aceptando diferente cantidad de parametros...como lo debo hacer?

Mi codigo es este:

////////////////////////////////////////////////////////////////////////////////
unit UFunciones;

interface
uses
UformaAcceso, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
fcOutlookList, fcButton, fcImgBtn, fcShapeBtn, ExtCtrls, fcClearPanel,
fcButtonGroup, fcOutlookBar, ImgList, fcImager, ComCtrls, StdCtrls, Db,
Mask, DBCtrls, ProfDateTimePicker, dxCntner, dxEditor, dxEdLib, dxDBELib,
Spin, wwdbedit, Wwdbspin, fcLabel, ToolWin, Buttons, Wwkeycb, dxDBTLCl,
dxGrClms, dxTL, dxDBCtrl, dxDBGrid, Menus, DBTables;

procedure ControlBarraDeBotonesAltasCambiasEdicion(BotonAlta, BotonEdicion, BotonBorrar, BotonAceptar,BotonCancelar:TSpeedbutton; AccionPasada:string; Tabla: Tdataset; Grupo:Tgroupbox);


implementation

procedure ControlBarraDeBotonesAltasCambiasEdicion(BotonAlta, BotonEdicion, BotonBorrar, BotonAceptar,BotonCancelar:TSpeedbutton; AccionPasada:string; Tabla: Tdataset; Grupo:Tgroupbox);
begin
if (AccionPasada='Insertar') then
begin
Tabla.Insert;
BotonEdicion.Enabled:=false;
BotonAceptar.Enabled:=true;
BotonCancelar.Enabled:=true;
BotonAlta.Enabled:=false;
BotonBorrar.Enabled:=false;
grupo.Enabled:=true;
end;
if (AccionPasada='Editar') then
begin
Tabla.Edit;
BotonEdicion.Enabled:=false;
BotonAceptar.Enabled:=true;
BotonCancelar.Enabled:=true;
BotonAlta.Enabled:=false;
BotonBorrar.Enabled:=false;
grupo.Enabled:=true;
end;
if (AccionPasada='Aceptar') then
begin
Tabla.Post;
BotonEdicion.Enabled:=true;
BotonAceptar.Enabled:=false;
BotonCancelar.Enabled:=false;
BotonAlta.Enabled:=true;
BotonBorrar.Enabled:=true;
grupo.Enabled:=false;
end;
if (AccionPasada='Cancelar') then
begin
Tabla.Cancel;
BotonAlta.Enabled:=true;
BotonEdicion.Enabled:=true;
BotonAceptar.Enabled:=false;
BotonCancelar.Enabled:=false;
BotonBorrar.Enabled:=true;
grupo.Enabled:=false;
end;
end;
//////////////////////////////////////////////////////////////////////
__________________

"Los unicos que no se equivocan son aquellos que no intentan hacer algo."
Iván Caballero Cano...
ivanhalen77@gmail.com
Responder Con Cita
  #2  
Antiguo 20-04-2010
Avatar de flystar
flystar flystar is offline
Miembro
 
Registrado: jul 2006
Posts: 184
Poder: 18
flystar Va por buen camino
NO hagan caso a la funcion que sale ahi

No hagan caso a este mensaje..no supe como borrarlo
__________________

"Los unicos que no se equivocan son aquellos que no intentan hacer algo."
Iván Caballero Cano...
ivanhalen77@gmail.com
Responder Con Cita
  #3  
Antiguo 20-04-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
La palabra reservada "constructor" se usa para declarar un constructor en una clase. Vos no estás usando clases, así que lógicamente no andaría.

Para declarar uno o más procedimientos/funciones que se llamen igual pero tengan diferentes parámetros, usá la palabra reservada "overload". Es lo que se llama sobrecarga de operadores.

Código Delphi [-]

procedure HacerAlgo(Par1, Par2: Integer; var Par3: string); overload;
procedure HacerAlgo(Par1, Par2: Integer); overload;

[...]

procedure HacerAlgo(Par1, Par2: Integer; var Par3: string); overload;
begin
end;

procedure HacerAlgo(Par1, Par2: Integer); overload;
begin
end;

Y listo. Así de fácil es.

Saludongos.
Responder Con Cita
  #4  
Antiguo 20-04-2010
Avatar de flystar
flystar flystar is offline
Miembro
 
Registrado: jul 2006
Posts: 184
Poder: 18
flystar Va por buen camino
Saludos amigos

parece que lo que hay que hacer es ponerle la palabra overload en la seccion de interface a los encabezados de cada procedimiento...

No se trata del asunto de los constructores.. osea que sería así:

procedure ControlBarraDeBotonesAltasCambiasEdicion(BotonAlta, BotonEdicion, BotonBorrar, BotonAceptar,BotonCancelar:TSpeedbutton; AccionPasada:string; Tabla: Tdataset; Grupo:Tgroupbox); overload

procedure ControlBarraDeBotonesAltasCambiasEdicion(BotonEdicion, BotonBorrar, BotonAceptar,BotonCancelar:TSpeedbutton; AccionPasada:string; Tabla: Tdataset; Grupo:Tgroupbox); overload

Si alguien tiene una idea mejor, agradesco sugerencias
__________________

"Los unicos que no se equivocan son aquellos que no intentan hacer algo."
Iván Caballero Cano...
ivanhalen77@gmail.com
Responder Con Cita
  #5  
Antiguo 20-04-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Correcto, así sería.

Realmente no hay mucho que se pueda hacer en estos casos. Yo creo que tenés dos posibilidades:

[1] Cambiarles el nombre para que reflejen los cambios de comportamiento. Por ejemplo: ControlBarraDeBotonesAltasCambiasEdicion y ControlBarraDeBotonesAltasCambiasEdicion_ConX. Lo que pasa es que tu nombre ya es bien largo como para andar agregando sufijos...
[2] Usar sobrecarga.

Lo de sobrecargar tiene la desventaja de que si el día de mañana tenés comportamiento distinto, pero con los mismos parámetros, no podés sobrecargar. Tenés que cambiarles el nombre y te quedan funciones con sobrecarga y funciones con sufijo. Es decir, dos paradigmas distintos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como crear clases correctamente? alquimista OOP 10 10-04-2010 12:21:15
¿Cómo evitar un warning por sobrecargar un constructor? vejerf OOP 5 28-07-2008 13:49:55
¡El Profesor Fungus me declara la guerra! Ñuño Martínez La Taberna 11 09-07-2008 19:37:29
Como Utilizo Correctamente FastReport hmrvivas Impresión 8 11-09-2007 17:17:14
Como usar correctamente ReplaceDialog? clanmilano Varios 1 06-02-2006 13:41:57


La franja horaria es GMT +2. Ahora son las 17:26:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi