Funções

Toda tarefa pode ser dividida em sub-tarefas, cada qual podendo ser representada tanto na forma de código, como ser divida em sub-tarefas ainda menores. Este método é chamado de refinamento passo a passo.. Funções são usadas para escrever o código das sub-tarefas a serem resolvidas. O código que descreve o que uma função faz é chamado de definição de função:

function_header
  {
  instruções
  }

Tudo que está antes da primeira chave é o cabeçalho (header) da definição de função, e o que está entre as chaves é o corpo (body) da definição de função. O cabeçalho de função (function header) inclui a descrição do tipo de valor de retorno, o nome (identificador) e os parâmetros formais. O número de parâmetros passados para a função é limitado e não pode exceder 64.

A função pode ser chamada de outras partes do programa quantas vezes forem necessárias. Na verdade, o tipo de retorno, o identificador da função e os tipos de parâmetros constituem o protótipo da função.

Protótipo de função é a declaração da função, mas não a sua definição. Devido a declaração explícita do tipo de retorno e da lista dos tipos de argumentos, a verificação estrita de tipo e a implícita conversão de tipo (typecasting) são possíveis durante as chamadas de função. Muito freqüentemente declarações de funções são usadas em classes para melhorar a legibilidade do código.

As definições de função devem corresponder exatamente à sua declaração. Cada função declarada deve ser definida.

Exemplo:

double                       // tipo do valor de retorno
linfunc (double a, double b) // nome da função e lista de parâmetros
  {
                             // operador composto
   return (a + b);           // valor do retorno
  }

 

O operador return pode retornar o valor de uma expressão localizada neste operador. Se necessário, o valor da expressão é convertido para o tipo do resultado da função. Pode ser retornado: tipos simples, estruturas simples, ponteiros de objetos. Com o operador return não se pode retornar arrays, objetos de classe, variáveis de tipo estrutura composta.

Uma função que não retorna nenhum valor deve ser descrita como do tipo void.

Exemplo:

void errmesg(string s)
  {
   Print("erro: "+s);
  }

 

Parâmetros passado para a função podem ter valores default (padrão), que são definidos por constantes daquele tipo.

Exemplo:

int somefunc(double a,
             double d=0.0001,
             int n=5,
             bool b=true,
             string s="string transmitida")
  {
   Print("Parâmetro obrigatório a = ",a);
   Print("Transmitir os seguintes parâmetros: d = ",d," n = ",n," b = ",b," s = ",s);
   return(0);
  }

 

Se algum dos parâmetros tem um valor default, todos os parâmetros subseqüentes devem também ter valores default.

Exemplo de declaração incorreta:

int somefunc(double a,
             double d=0.0001,    // valor padrão declarado 0.0001
             int n,              // não é determinado o valor padrão!
             bool b,             // não é determinado o valor padrão!
             string s="string transmitida")
  {                                          
  }           

Também Veja

Sobrecarga (Overload), Funções Virtuais, Polimorfismo