O método overload
Bom, vocês já devem ter visto algumas funções com o mesmo nome mas com parâmetros diferentes certo?? Isso é exatamente o que o método overload faz. Suponha que você tenha uma função que retorne o tamanho de uma matriz, mas o algoritmo para retornar o tamanho de um vetor (que é na verdade uma matriz com apenas uma coluna/linha) e de uma matriz é diferente. Normalmente você teria que usar um nome diferente para cada função, como "TamanhoVetor" e "TamanhoMatriz", certo?
Com o método overload você pode usar um nome só, "TamanhoMatriz", sendo que uma dessas funções tem como parametro um vetor e a outra uma matriz.
Bom, vamos ver isso na prática.
Primeiro vou colocar aqui as funções que calculam o tamanho da matriz e o vetor com nomes diferentes mesmo. Não vou explicá-las pois não é o objetivo dessa aula.
Declarem o seguinte entes do implementation do código:
Código para calcular o tamanho da matriz (supondo que ela seja quadrada ou retangular):
Código para calcular tamanho do vetor:
Como utilizar é fácil, é só colocar a função desejada com o parâmetro certo e pronto. Agora vamos deixá-las com o mesmo nome. Repare que se você tentar simplesmente mudar o nome vai dar o seguinte erro:
Para deixar as duas funções com o nome "TamanhoMatriz", primeiro coloque a diretiva "overload" após a função TamanhoMatriz e depois renomeie a TamanhoVetor e coloque a mesma diretiva desse modo:
Agora repare que quando voçê digitar Tamanho e apertar Ctrl+Espaço vão aparecer as duas funções com o mesmo nome mas com parâmetros diferentes.
A utilização do overload ajuda a deixar o código mais limpo e fácil de entender.
Autor: Ace Ventura
Bom, vocês já devem ter visto algumas funções com o mesmo nome mas com parâmetros diferentes certo?? Isso é exatamente o que o método overload faz. Suponha que você tenha uma função que retorne o tamanho de uma matriz, mas o algoritmo para retornar o tamanho de um vetor (que é na verdade uma matriz com apenas uma coluna/linha) e de uma matriz é diferente. Normalmente você teria que usar um nome diferente para cada função, como "TamanhoVetor" e "TamanhoMatriz", certo?
Com o método overload você pode usar um nome só, "TamanhoMatriz", sendo que uma dessas funções tem como parametro um vetor e a outra uma matriz.
Bom, vamos ver isso na prática.
Primeiro vou colocar aqui as funções que calculam o tamanho da matriz e o vetor com nomes diferentes mesmo. Não vou explicá-las pois não é o objetivo dessa aula.
Declarem o seguinte entes do implementation do código:
Código:
type MatrizInteger = array of array of integer; VetorInteger = array of integer;
Código:
function TamanhoMatriz(matriz: MatrizInteger): string; var i: integer; begin if Length(matriz) > 0 then Result:=inttostr(Length(matriz)) + 'x' + inttostr(Length(matriz[0])) else Result:='0x0'; end;
Código:
function TamanhoVetor(vetor: VetorInteger): string; begin Result:=inttostr(Length(vetor)); end;
Código:
[Error] Unit1.pas(41): Previous declaration of 'TamanhoMatriz' was not marked with the 'overload' directive
Código:
function TamanhoMatriz(matriz: MatrizInteger): string; overload; var i: integer; begin if Length(matriz) > 0 then Result:=inttostr(Length(matriz)) + 'x' + inttostr(Length(matriz[0])) else Result:='0x0'; end; function TamanhoMatriz(vetor: VetorInteger): string; overload; begin Result:=inttostr(Length(vetor)); end;
A utilização do overload ajuda a deixar o código mais limpo e fácil de entender.
Autor: Ace Ventura