33. C++ || Funciones argumentos por omisión






Hemos explicado que cuando se llama una función, se debe enviar la misma cantidad de parámetros con las cuales ha sido definida, sin embargo, C++ permite el uso de argumentos por omisión. Un argumento por omisión es aquel que ya esta predeterminado en la función, su valor ya esta establecido, con esto nos referimos a que cuando se llama a la función, los parámetros que se envían pueden ser menos de los parámetros establecidos en la definición de la función, por ejemplo:

void asterisco(int fila, int columna, int num, char c = '*');

Esta función se puede llamar de las siguientes maneras:

asterisco(3, 5, 7);

o bien

asterisco(3, 5, 7, '*');

Pero no sólo eso, también, si es conveniente, podemos cambiar el carácter utilizado por la función

asterisco(3, 5, 7, '#');

Y de esta manera cambiaríamos el argumento por omisión.

Otro ejemplo es la función establecer()

int establecer(int hora = 12, int minuto = 0, int segundo = 0, char car = 'A');

La función se podría llamar de las siguientes maneras:

int establecer(int hora = 6, int minuto = 30, int segundo = 45, char car = 'P'); //Anula los primeros cuatro argumentos por defecto

int establecer(int hora = 9, int minuto = 10, int segundo = 30); //Anula los primeros tres argumentos por defecto

int establecer(int hora = 7, int minuto = 20); //Anula los primeros dos argumentos por defecto

int establecer(int hora = 8); //Anula el primer argumento por defecto

int establecer(); //Usa todos los argumentos por defecto

Las sentencias anteriores equivalen a:

int establecer(int hora = 6, int minuto = 30, int segundo = 45, char car = 'P');
int establecer(int hora = 9, int minuto = 10, int segundo = 30, char car = 'A');
int establecer(int hora = 7, int minuto = 20, int segundo = 0, char car = 'A');
int establecer(int hora = 8, int minuto = 0, int segundo = 0, char car = 'A');
int establecer(int hora = 12, int minuto = 0, int segundo = 0, char car = 'A');

Debes tener en cuenta que no se puede omitir un argumento a menos que se omitan todos los argumentos a su derecha. Por ejemplo:

int establecer( , 6, 35 ,'P');

Esto produciría un error ya que se ha omitido el primer argumento pero no el resto.

int establecer( , ,50, 'P');

Esto otro también es un error.

Ejemplo del uso de argumentos por omisión


Los argumento por omisión se definen sólo en el prototipo de la función. Veamos un ejemplo:

#include <iostream>
using namespace std;

void MiFuncion(int a = 5, int b = 10, int c = 15); //Definimos los argumentos por defecto

int main()
{
    cout<<"Usando los argumentos por defectos"<<endl;
    MiFuncion();
    cout<<"Usando dos argumentos por defectos"<<endl;
    MiFuncion(100);
    cout<<"Usando un argumento por defecto"<<endl;
    MiFuncion(100,200);
    cout<<"Cambiando todos los argumentos por defectos"<<endl;
    MiFuncion(100,200,300);
    return 0;
}

void MiFuncion(int a, int b, int c) 
{
    cout<<"a = "<<a<<endl;
    cout<<"b = "<<b<<endl;
    cout<<"c = "<<c<<endl;
}



1 comentario:

  1. Muchas Gracias por la explicacion. Me despejaste dudas.

    ResponderEliminar