Resumo da Aula 5

Sumário

1  Sobrecarga de nomes de rotinas

É possível dar o mesmo nome a várias rotinas desde que as suas listas de parâmetros sejam diferentes (quer em número de parâmetros quer em tipos dos parâmetros), ou seja, se a sua assinatura for diferente.  Por exemplo, se estiverem definidas as seguintes funções com sobrecarga do nome soma() int soma(int const a, int const b)
{
    return a + b;
}

int soma(int const a, int const b, int const c)
{
    return a + b + c;
}

float soma(float const a, float const b)
{
    return a + b;
}

double soma(double const a, double const b)
{
    return a + b;
}

então, ao executar o código int i = 0;
int j = soma(i, 1);         // invoca int soma(int, int).
int k = soma(i, j, 2);      // invoca int soma(int, int, int).
float f = 3.0f;
float g = soma(4.0f, f);    // invoca float soma(float, float).
double x = 5.0, y = 6.0;
cout << soma(x, y) << endl; // invoca double soma(double, double).
são chamadas as funções apropriadas para cada tipo de argumentos usados.

2  Rotinas recursivas

Uma rotina recursiva é aquela que contém no seu corpo uma invocação de si própria.  Por exemplo:

int factorial(int const n)
{
    if(n == 0 or n == 1)              // if é uma instrução condicional que
        return 1;                     // executa esta linha se n = 0 ou n = 1
    else                              // e, no caso de n <> 0 ou n <> 1,
        return n * factorial(n - 1); // executa esta outra.
}
Este tipo de rotinas pode ser muito útil na resolução de alguns problemas, mas deve ser usado com cautela, pois conduz frequentemente a código muito pouco eficiente.

Para mais informações sobre a instrução if, ver as folhas teóricas ou o Resumo da aula prática 6.