Resumo da Aula 5

Sumário

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 somaDe(int const a, int const b)
{
    return a + b;
}

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

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

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

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

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 2.