Parámetros por defecto

Es una forma de indicar qué valor debe ser pasado a una función en el caso en que en la llamada no se pase nada, o se pasen menos argumentos de los definidos. Un ejemplo de definición de una función que tiene parámetros por defecto en su lista de argumentos es:

void funcion (int y = 2)

En este caso, estamos definiendo un valor, 2, que tomará la variable y en caso de que no se pase nada en la llamada a la función:

funcion ();

Aunque no se ha pasado ningún argumento, la función trabajará. Como no se ha pasado ningún valor, y toma el valor 2, y la función se ejecuta. Si quisiéramos pasar un valor, se haría como en un caso normal:

funcion (231);

Ahora y toma el valor 231.
En el caso de que la función tenga una lista con varios argumentos, los que tengan valores por defecto deben ir al final:

void funcion2 (int var1, int var2, int var3 = 0, int var4 = 0)

es la forma correcta de hacerlo. En cambio:

void funcion2 (int var1, int var2 = 0, int var3 = 0, int var4)

no es correcto. La razón es que si quisiéramos llamar a esta función con tres argumentos, el compilador no distinguiría si los valores que pasamos corresponden a var1, var2 y var3 o a var1, var3 y var4.
Resumiendo, hemos de seguir las siguientes reglas al declarar funciones con parámetros por defecto:

Veamos un ejemplo:

# include <iostream.h>

int volumen (int longitud, int anchura = 2, int altura = 3);

main()
{
   int x = 10, y = 12, z = 15;

   cout << "Volumen =" << volumen (x,y,z) << '\n';
   cout << "Volumen =" << volumen (x,y) << '\n';
   cout << "Volumen =" << volumen (x) << '\n';

   cout << "Volumen =" << volumen (x,7) << '\n';
   cout << "Volumen =" << volumen (5,5,5) << '\n';
}

int volumen (int longitud, int anchura, int altura)
{
  return longitud * anchura * altura;
}

El resultado de la ejecución de este programa será:

  Volumen = 1800.
  Volumen = 360.
  Volumen = 60.
  Volumen = 210.
  Volumen = 125.

En este programa: