Valores por Defecto para Funciones en C++

Hoy vamos a dedicar un poco de tiempo para aprender sobre una de las muchas características que nos brinda C++ y que finalmente resulta ser bastante útil, así que, ¿por qué no usarla?. Hoy hablaremos (como el título lo indica) de los valores por defecto cuando trabajamos con funciones o métodos de C++.

keep-calm-and-code-c++-argumentos-funciones-defecto

A diferencia del lenguaje C, en el cual, cuando vas a utilizar una función y esta en su declaración indica que tiene por ejemplo 2 argumentos de entrada, entonces obligatóriamente tienes que pasar esos dos argumentos para poder hacer uso de la función, de lo contrario el compilador arrojará un mensaje de error indicando una inconsistencia en el uso de dicho función en el programa.

En C++ por el contrario, este error no aparece (y no es por un mal funcionamiento del compilador) es debido a que se incorporó una útil opción y es indicar valores por defecto en los argumentos de entrada de dichas funciones, de esta forma no se hace estrictamente necesario pasar todos los argumentos a dicha función, esto resulta útil en muchas ocasiones, incluso por seguridad en la ejecución de nuestro programa. En esta ocasión no vamos a implementar un programa muy “novedoso”, simplemente vamos a ver como se utiliza esta característica.

Vamos a implementar una función a la cual llamaremos suma( ), y recibirá como parámetros dos números enteros sin embargo haremos que por defecto, si solo se le pasa el primer argumento entonces que solo le sume 1, es decir que lo incremente en una unidad.

El prototipo de una función que tenga valores por defecto, en este caso el de la función suma( ) es el siguiente.


int suma(int , int = 1); //Primer forma del prototipo
int suma(int a, int b=1); //Segunda forma de escribir el prototipo

Cómo se puede observar, dado que la primera línea es solo un prototipo de la función, no es necesario indicar el nombre de las variables a utilizar, solo basta con indicar el tipo de dato que se va a recibir y si va a tener valores por defecto solo hay que realizar la igualación con dichos valores.

El código completo (listo para su compilación y ejecución) sería el siguiente, como se puede observar en el primer llamado a la función suma se pasan dos argumentos, entonces el valor que tengamos por defecto no será utilizado, por el contrario, en el segundo llamado a la función suma( ) solo le pasamos el argumentos num1, entonces la función le dará al segundo parámetro (el cual no fue pasado) el valor por defecto 1 lo que quiere decir que al ejecutar dicha función solo hay un incremento.


#include <iostream>

using namespace std;

int suma(int, int = 1); //Prototipo de la función suma

int main(void)
{
        int num1 = 2, num2 = 3,  result;

        result =  suma(num1, num2);  // Llamado con dos parámetros
        cout<<"num1 + num2 = "<<result<<endl;

        result = suma(num1);   //Llamado con un solo parámetro
        cout<<"num1 + 1 = "<<result<<endl;

        return 0;
}

int suma(int a, int b) //Definición de la función suma
{
        return (a+b);
}

Luego, cuando realizamos la compilación y ejecución de dicho código, los resultados aparecerán en consola tal como se muestra a continuación:

Resultado de la ejecución del código con valores por defecto en C++.

Resultado de la ejecución del código con valores por defecto en C++.

Hay que tener en cuenta dos puntos importantes (que para C++, son en realidad reglas).

* Cuando declaras un valor por defecto para un parámetro, debes indicarlo para el resto de parámetros que continúen después de el. Esto quiere decir que por ejemplo en el compilador que uso actualmente lo siguiente debería generar un ‘error’.


int funcion(int, int = 1, char ); //Error, tercer argumento sin valor por defecto

Lo correcto sería (por ejemplo):


int funcion(int, int = 1, char = 'a' ); //Tercer argumento con valor por defecto

*  Una vez haces el llamado a la función y omites un parámetro, ya no puedes seguir pasando los siguientes parámetros, es decir, en el ejemplo del punto anterior no podría pasar el primer y tercer argumento y omitir solo el segundo, por el contrario, una vez he omitido el segundo parámetro, ya no puedo pasar el tercero. Es decir, que no puedo llamar a la función anterior de la siguiente forma.


resultado = funcion( 2 , 'b' );

Lo correcto sería pasar los 3 argumentos o solo pasar el primero una vez hemos omitido el segundo parámetro, para evitar errores.


resultado = funcion( 2 );

Por último, hay algo muy importante a tener en cuenta cuando especificamos valores por defecto para los argumentos de entrada de una función, y es que no se pueden redefinir, esto quiere decir que si ya hemos especificado el valor por defecto de un parámetro en el prototipo de dicha función, entonces no hay que volverlo a indicar al momento de implementarla, o al contrario, sino se indica el valor por defecto en el prototipo de la función, sí se debe hacer entonces a la hora de implementar dicha función, la cuestión finalmente es que no se debe hacer en ambas por igual.

Hasta aquí este artículo, en el que hemos mostrado un poco sobre de las características (entre muchas otras) que hacen rico al lenguaje C++, espero que haya resultado útil y si tienes sugerencias sobre algunos temas que te gustaría que incluyésemos en el futuro, te esperamos en los comentarios.

Saludos.

Autor: Julio César Echeverri.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s