Entendido.

Este sitio utiliza cookies para analizar la navegación.Si continúa navegando se entiende que acepta su uso. Ver más detalles.

Logo

Aprende Web C++

Aprende a programar en C++ con Aprende-Web

Nociones Básicas

programación en C++ desde cero.


Buscar en Aprende Web

Traducir página

Visita nuestro blog:

bolg.aprende-web.net

y entérate de las novedades o deja un comentario.

Dudas y sugerencias:

aprendeweb@aprende-web.net



Sobre ésta página

Ültima modificación: 13-07-2018.

Visitas este mes: 1

Visitas el mes pasado:

logo
WEB-GRAFÍA

Mi agradecimiento a los siguientes sitios en los que me he basado para la elaboración de los manuales.:

cplusplus.com
Sitio oficial de C++: Informacion, Referencias, Tutorial, Foro. (En inglés)
Minidosis.org
Curso de C++ con videos y lecturas.
conclase.net
Curso de C++
programar ya
Curso de C++ desde cero
cprogramming.com
C++ Tutorial (inglés).
Entorno de desarrollo integrado
fergarciac.wordpress.com
Compiladores, intérpretes y Máquinas virtuales.
latecladeescape.com
el hacker.net
Programación
Desarrollo web
Manual de iniciación a la programación.

En los distintos manuales incluimosm más webgrafía especifica de cada sección.


Donativos

Si este sitio te parece interesante puedes contribuir con una pequeña aportación.





5. Funciones

5.3. Pasar argumentos

Pasar argumentos por valor

Logo C++ Basico

Existen varias formas de pasar un argumento o parámetro a una función. La primera es la que hemos visto hasta ahora, y es pasar los argumentos por valor.

Su principal característica es que el vlor que pasamos a la función no se modifica fuera de la función, aunque lo modifiquemos dentro de la misma. Es decir, al pasar un valor a una función, lo que realmente estamos pasando es una copia del mismo, de manera que el original se conserva tal como estaba.

La forma de pasar argumentos por valor es la vista hasta ahora. Veamos un ejemplo en el que comprobamos que esto es así:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include<iostream>
using namespace std;
int sumauno(int n);

int main (){
    int a=3, b;
    cout << "valor inicial : " << a << endl;
    b=sumauno(a);
    cout << "valor en sumauno : " << b << endl;
    cout << "valor tras la funcion : " << a <<endl;
}

int sumauno(int n){
     n++;
     return n;
}
ejemplo 1

Este programa nos muestra el valor inicial de una variable. Tras pasarla a un programa en el que sumamos uno, mostramos el valor que devuelve la función, para después volver a mostrar el valor de la variable.

Vemos cómo el valor de la variable, si bien cambia dentro de la función, tras aplicar la función sigue siendo el mismo.


Pasar argumentos por defecto

Aquí al declarar la función indicamos los valores por defecto que tendrán los argumentos en caso de que al ser llamada no se le pasen.

Para ello en la declaración de la función tenemos que dar un valor a los parámetros, por ejemplo:

int multiplica(int n1=1,int n2=1);

Después en la definición no debemos indicar los valores por defecto, a no ser que no pongamos declaración y pongamos la definición directamente en la cabecera.

int multiplica(int n1,int n2) { /*sentencias*/ };

Observa cómo al definir el parámetro, además de indicar el tipo, le asignamos un valor por defecto mediante el signo igual. Si al llamar a la función no se han indicado los argumentos, tomará los valores que hemos puesto por defecto. Veamos el siguiente programa de ejemplo:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include<iostream>
using namespace std;
int multiplica(int n=1,int n2=1);

int main (){
    int a=3, b=5;
    cout << "valores iniciales : " << a << " , " << b << endl;
    cout << "valor sin argumentos : " << multiplica() << endl;
    cout << "valor un argumento : " << multiplica(a) <<endl;
    cout << "valor con dos argumentos : " << multiplica(a,b) << endl;
}

int multiplica(int n1,int n2){
     return n1*n2;
}
ejemplo 1

La función multiplica dos números, pero si no se le pasan los argumentos estos números serán el 1. En el programa llamamos varias veces a la función, poniendo, 0, 1, y 2 argumentos.

Observa cómo cuando faltan argumentos en la llamada, la función toma los valores por defecto que hemos puesto en la definición de los parámetros.

Los valores por defecto sólo se indican en la declaración (línea 3), de manera que en la definición (líneas 13 a 15) se indican los parámetros sin asignarles un valor.

Por otra parte los argumentos siguen estando definidos por valor, es decir, después de ejecutar la función, los valores que hemos pasado no cambian aunque cambien dentro de la función.


Pasar argumentos por referencia

Al pasar un argumento por referencia lo que hacemos es pasar la propia variable y no una copia de la misma, por lo que todos los cambios que se produzcan en el parámetro que hemos pasado se producen en la variable. Al salir de la función, las variables que hemos modificado dentro de la función estarán también modificadas fuera.

Para pasar una variable por referencia, tanto en la declaración como en la definición, al escribir las variables que contienen los parámetros debeos ponerles el signo ampersand & delante. Veamos el ejemplo:

int sumauno(int &a);

Aquí en el parámetro le hemos puesto delante el signo de ampersand, lo mismo debemos hacer en la defnición de la función:

int sumauno(int &a) { */sentencias*/ }

Para ver la diferencia entre pasar los parámetros por valor o por referencia, vamos a coger el primer ejemplo que hemos puesto, en el que pasábamos los parámetros por valor, y los cambiamos a parámetros por referencia. El programa quedará así:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include<iostream>
using namespace std;
int sumauno(int &n);

int main (){
    int a=3, b;
    cout << "valor inicial : " << a << endl;
    b=sumauno(a);
    cout << "valor en sumauno : " << b << endl;
    cout << "valor tras la funcion : " << a <<endl;
}

int sumauno(int &n){
     n++;
     return n;
}
ejemplo 1

La única diferencia entre este programa y el primero es el signo ampersandque hemos puesto para pasar los valores por referencia.

Vemos en el programa cómo al comprobar el valor de la variable tras ejecutar la función, éste ha cambiado, al igual que ha cambiado dentro de la función.

Si pasamos los parámetros por referencia no podemos poner valores por defecto. Los parámetros por defecto sólo pueden estar presentes junto con parámetros pasados por valor.

El signo ampersand lo hemos puesto siempre delante de la variable, pero también puede ir detrás de la especificación del tipo, es decir podemos escribir:

int sumauno(int &a);

... o también podemos escribir:

int sumauno(int& a);

Las dos formas son correctas, y el programa compilará igualmente.






Aquí va una breve reseña de la págna siguiente

Acciones



Manual Básico de C++

Anterior siguiente ... Siguiente siguiente


imprimir esta página

Página creada por ANYELGUTI.

Sugerencias: aprendeweb@aprende-web.net. Envia un manda un correo

Visita nuestro blog par saber en qué estamos trabajando: Aprende Web Blog

Más sobre anyelguti en http://anyelguti.16mb.com