12.170 cursos gratis
8.774.058 alumnos
Facebook Twitter YouTube
Busca cursos gratis:

Programación en C++

Autor: Josue Diaz Cuenca
Curso:
8,89/10 (458 opiniones) |69596 alumnos|Fecha publicaciýn: 04/06/2004

Capýtulo 13:

 Funciones con número de argumentos no especificado

Funciones con número de argumentos no especificadoC++ permite declarar una función cuyo número y tipo de argumentos no son conocidos en el momento de la compilación. Esta característica se indica con la ayuda del operador especial puntos suspensivos (...) en la declaración de la función. void f1(...);

Esta declaración indica que f1 es una función que no devuelve ningún valor y que tomará un número variable de argumentos en cada llamada. Si algunos argumentos se conocen, deben situarse al principio de la lista: void f2(int a,float b,...);

Los puntos suspensivos indican que la función se puede llamar con diferentes conjuntos de argumentos en distintas ocasiones. Este formato de prototipo reduce la cantidad de verificación que el compilador realiza. Así, la función predefinida printf(), que tiene el prototipo: int printf(char *formato,...);

Esto significa que la función devuelve un entero y acepta un puntero a un parámetro fijo de caracteres y cualquier número de parámetros adicionales de tipo desconocido. Con este prototipo, el compilador verifica en tiempo de compilación los parámetros fijos, y los parámetros variables se pasan sin verificación de tipos.

El archivo stdarg.h contiene macros que se pueden utilizar en funciones definidas por el usuario con número variable de parámetros.

En C++ hay otro método para proporcionar argumentos a funciones que tienen listas de argumentos en número variable. Este método facilita al compilador toda la información necesaria en una lista con un número variable de argumentos, proporcionándole un conjunto de variables preescritas que le indican cuántos argumentos contiene la lista y qué tipo de datos son.

Las macros que se pueden utilizar para este propósito están definidas en un archivo de cabecera denominado stdarg.h y son va_start(), va_arg() y va_end().

Las macros del archivo stdarg.h tienen dos características útiles:
- Han sido escritas para uso del programador y son bastantes versátiles, de modo que se pueden utilizar de diversas formas.
- Las macros proporcionan un medio transportables para pasar argumentos variables. Esto se debe a que están disponibles dos versiones de macros: las definidas en stdarg.h, que siguen el standard ANSI C, y las definidas en varargs.h, que son compatibles con UNIX System V.

La macro va_list es un tipo de dato que es equivalente a una lista de variables. Una vez que se define una variable va_list, se puede utilizar como un parámetro de las macros va_start() y va_end().

La sintaxis de la macro va_start() es: void va_start(va_list arg_ptr, prev_param);

arg_ptr apunta al primer argumento opcional en una lista variable de argumentos pasados a una función. Si la lista de argumentos de una función contiene parámetros que se han especificado en la declaración de la función, el argumento prev_param de va_start() proporciona el nombre del argumento especificado de la función que precede inmediatamente al primer argumento opcional de la lista de argumentos.

Cuando la macro va_start() se ejecuta, hace que el parámetro arg_ptr apunte al argumento especificado por prev_param.

La sintaxis de la macro va_arg() es: void va_arg(va_list arg_ptr,tipo);

La macro va_arg() tiene un propósito doble:
- Primero, va_arg() devuelve el valor del objeto apuntado por el argumento arg_ptr.
- Segundo, va_arg() incrementa arg_ptr para apuntar al siguiente elemento de la lista variable de argumentos de la función que se está llamando, utilizando el tamaño tipo para determinar dónde comienza el siguiente argumento.

La sintaxis de la macro va_end() es: void va_end(va_list arg_ptr);

La macro va_end() realiza las tareas auxiliares que son necesarias para que la función llamada retorne correctamente. Cuando todos los argumentos se leen, va_end() reinicializa arg_ptr a NULL.

Ejemplo:
#include <iostream.h>
#include <stdarg.h>
int calcular(int primero,...);

void main()
{
cout<<calcular(2,15,-1)<<endl;
cout<<calcular(6,6,6,-1)<<endl;
cout<<calcular(8,10,1946,47,-1)<<endl;
}

int calcular(int primero,...)
{
int cuenta=0,suma=0,i=primero;
va_list marcador;
va_start(marcador primero);
while (i!=-1){ suma+=i;
cuenta++;
i=va_arg(marcador,int);
}
va_end(marcador);
return suma;
}

Argumentos por defecto (omisión)

Una mejora de las funciones en C++ es que se pueden especificar los valores por defecto para los argumentos cuando se proporciona un prototipo de una función. Cuando se llama a una función se pueden omitir argumentos e inicializarlos a un valor por defecto.

Un argumento por defecto u omisión es un parámetro que un llamador a una función no ha de proporcionar. Los argumentos por defecto también pueden ser parámetros opcionales. Si se pasa un valor a uno de ellos, se utiliza ese valor. Si no se pasa un valor a un parámetro opcional, se utiliza un valor por defecto como argumento.

void f(int ,int =2);
void main()
{
f(4,5);
f(6);
}

void f(int i, int j)
{
cout<<i<<","<<j<<endl;
}

Al ejecutar el programa, se visualizará: 4,5   6,2

Los argumentos por defecto se pasan por valor.

Todos los argumentos por defecto debe estar situados al final del prototipo de la función. Después del primer argumento por defecto, todos los argumentos posteriores deben incluir también valores por defecto.

Capýtulo siguiente - Objetos y clases

Nuestras novedades en tu e-mail

Escribe tu e-mail:



MailxMail tratarý tus datos para realizar acciones promocionales (výa email y/o telýfono).
En la polýtica de privacidad conocerýs tu derechos y gestionarýs la baja.

Cursos similares a Programación en C++



  • Výdeo
  • Alumnos
  • Valoraciýn
  • Cursos
1. C# Curso de Programación
Curso Básico de programación en C#, este curso básico abarcará desde las bases del... [14/07/05]
15.672  
2. Programación estructurada
Este curso les ayudará a tener conceptos básicos de la programación. Estos... [25/04/07]
3.025  
3. Programación estructurada (primera parte)
Aprende, en el mundo de la informática, la programación estructurada: en qué... [16/10/08]
4.454  

ýQuý es mailxmail.com?|ISSN: 1699-4914|Ayuda
Publicidad|Condiciones legales de mailxmail