GARANTIR DESCONTO

Fórum Dúvida sobre Overload, mesmas assinaturas ??? #274272

28/03/2005

0

Olá pessoal. Estou com uma dúvida quanto ao uso da diretiva [b:6b04e8848c]Overload[/b:6b04e8848c], verifiquei vários tópicos passados, mas não obtive êxito. No meu caso é o seguinte. Tenho uma classe [b:6b04e8848c]Pai[/b:6b04e8848c] chamada [b:6b04e8848c]Banco[/b:6b04e8848c], declarada da seguinte forma :

type
  TBanco = Class(TObject) { Package declarations }

    //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
    private { Private declarations }


    //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
    public { Public declarations }
      // construtores e destrutores da classe
      constructor create;   virtual; abstract;
      destructor  destroy;  virtual; abstract;

    //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
  end;

var
  Banco : TBanco;


e a classe [b:6b04e8848c]filha[/b:6b04e8848c] chamado de [b:6b04e8848c]BancoFirebird[/b:6b04e8848c] abaixo:

type
  // atributos principais do classe BancoFirebird
  TBancoFirebird = Class(TBanco) { Package declarations }
    //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
    private { Private declarations }

    //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
    public { Public declarations }
      // variáveis e membros
      setPropertiesFirebird            : TPropertiesFirebird;

      // construtores e destrutores da classe
      constructor create;  override;
      destructor  destroy; override;

      // carregando configurações específicas para conexão do banco de dados
      function getConnectionParams : TPropertiesFirebird; overload;
      function getConnectionParams : TStrings;            overload;
      function getConnectionProperties : TPropertiesFirebird;

    //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
  end;

var
  BancoFirebird : TBancoFirebird;


Resumindo. Quando tento compilar, ele me retorna um erro na classe filha como:
Method ´getConnectionParams´ with identical parameters exist already Declaration of ´getConnectionParams´ differs from previous declaration


Sei que existe um problema quanto à declaração e acredito que isto só possa ser feito utilizando tipos de parâmetros passados dentro do método. Contudo, não sei como poderei fazer para resolver isto. Em java conseguiria, porque a JVM a teria a partir da assinatura do método, mas não estou muito bem lembrado como poderei fazê-lo em delphi. Se alguém puder me dar uma força agradeço!!!

:shock:
Meu chefe já pegou no meu pé, mais ainda não consegui o que faço!


Faelcavalcanti

Faelcavalcanti

Responder

Posts

28/03/2005

Massuda

[b:9120da3459]overload[/b:9120da3459] é usado para distinguir funções/procedures de mesmo nome mas com lista de parâmetros diferentes. No seu caso, apenas o valor de retorno é diferente e por isso o overload não está funcionando.


Responder

Gostei + 0

28/03/2005

Kapak

Vc também pode declarar assim:
procedure getConnectionParams(var Obj:TPropertiesFirebird); overload; 
procedure getConnectionParams(var Obj:TStrings); overload;



Responder

Gostei + 0

28/03/2005

Kapak

Vc também pode declarar assim:
procedure getConnectionParams(var Obj:TPropertiesFirebird); overload; 
procedure getConnectionParams(var Obj:TStrings); overload;



Responder

Gostei + 0

28/03/2005

Faelcavalcanti

[b:e5437938a7]overload[/b:e5437938a7] é usado para distinguir funções/procedures de mesmo nome mas com lista de parâmetros diferentes. No seu caso, apenas o valor de retorno é diferente e por isso o overload não está funcionando.


Pois é amigo, já estava prevendo isto. No meu caso foi uma tentativa de uma migração de código, estou tentando deixar parte de uma função genérica e por este motivo não estou conseguindo.

Mas quanto à :
Vc também pode declarar assim:Código: procedure getConnectionParams(var Obj:TPropertiesFirebird); overload; procedure getConnectionParams(var Obj:TStrings); overload;

Até fica legal, mas mesmo assim terei que declarar este tipo de objeto no escopo a ser utilizado, tipow :
procedure xxxx;
var v_Objeto : TStrings;
begin
  getConnectionParams(v_Objeto);
end;

Não é como eu queria, pois terei que encapsular diversas vezes um mesmo objeto, na verdade é apenas um exemplo como está o meu código. Acho que a idéia no delphi é fazer desta forma mesmo. Mas obrigado!!!

Pensava que no Delphi a sobrecarga de métodos era possível a partir do seu retorno, o que também faz parte da assinatura do método. O que de fato é totalmente possível em Java.

:roll:
Mas valeu. Happing code for us!!!! Thanks!!!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar