Parametros & argumentos
Parámetros y argumentos (programación): Un argumento o parámetro es el medio a partir del cual podemos expandir el ámbito de variables locales de funciones, hacia otras funciones y además quienes nos permiten establecer comunicaciones entre funciones. Si nos vemos ante la necesidad de visualizar o modificar el valor de una variable local en otra función que llamaremos, debemos invocar a dicha función haciendo referencia de su nombre, seguido de los parámetros o nombres de variables para las cuales, en teoría ampliaríamos su ámbito.
Las palabras parámetro y argumento, aunque de significado similar, tiene distintas connotaciones semánticas: Se denominan parámetros los tipos declarados en el prototipo (que deben corresponder con los declarados en la definición). Cuando se realiza una llamada a la función, los "valores" pasados se denominan argumentos. A veces se utilizan también las expresiones argumentos formales, para los parámetros y argumentos actuales para los valores pasados.
Sintaxis
La sintaxis utilizada para la declaración de la lista de parámetros formales es similar a la utilizada en la declaración de cualquier identificador. Ejemplos:
int func(void) {...} // sin parámetros inf func() {...} // ídem. int func(T1 t1, T2 t2, T3 t3=1) {...} // tres parámetros simples, // uno con argumento por defecto int func(T1* ptr1, T2& tref) {...} // los argumentos son un puntero y // una referencia. int func(register int i) {...} // Petición de uso de registro para // argumento (entero) int func(char* str,...) {...} /* Una cadena y cierto número de otros argumentos, o un número fijo de argumentos de tipos variables */
Los argumentos son siempre objetos. Sus tipos pueden ser: escalares; estructuras; uniones, o enumeraciones; clases definidas por el usuario; punteros o referencias a estructuras y uniones, o punteros a funciones, a clases o a matrices. El tipo void está permitido como único parámetro formal. Significa que la función no recibe ningún argumento. Todos los parámetros de una función tienen ámbito del bloque de la propia función y la misma duración automática que la función.
El único especificador de almacenamiento que se permite es register. En la declaración de parámetros también pueden utilizarse los modificadores volatile y const. Este último se utiliza cuando se pasan argumentos por referencia y queremos garantizar que la función no modificará el valor recibido. Ejemplo:
int dimension(X x1, const X& x2) // x2 NO se puede modificar!!
Argumentos por defecto
C++ permite tener valores por defecto para los parámetros. Esto supone que, si no se pasa el parámetro correspondiente, se asume un valor predefinido. La forma de indicarlo es declararlo en el prototipo de la función, como se muestra en el ejemplo (ambas expresiones son equivalentes).
float mod (float x, float y = 0); float mod (float, float = 0);
Un argumento por defecto no puede ser repetido o cambiado en una siguiente declaración dentro del mismo ámbito. Por ejemplo:
void func (int x = 5); ... void func (int x = 5); // Error: repetición de argumento por defecto { // nuevo ámbito void func (x = 7); // L.4 Correcto: esta función oculta a la anterior } // el ámbito anterior vuelve a ser visible void func (x = 7); // Error: cambiar argumento por defecto
La gramática de C++ exige que los parámetros con valores por defecto deben ser los últimos en la lista de parámetros, y que si en una ocasión falta algún argumento, los que le siguen también deben faltar (adoptar también los valores por defecto). Los argumentos por defecto de métodos (funciones-miembro de clases) no pueden ser otros miembros a no ser que sean estáticos. Los argumentos por defecto no pueden ser otros argumentos:
x = somefunc (int x, int y = x); // Error!
Los argumentos pasados por referencia solo pueden adoptar valores por defecto, estáticos, globales, o de un subespacio cualificado.
Comentarios
Publicar un comentario