FUNDAMENTOS DE PROGRAMACION

Si buscas hosting web, dominios web, correos empresariales o crear páginas web gratis, ingresa a PaginaMX
Por otro lado, si buscas crear códigos qr online ingresa al Creador de Códigos QR más potente que existe




FUNCIONES  GENERADAS  POR  EL  USUARIO
 

Las funciones se declaran y se definen exactamente igual que en C, y, al igual que en éste, se puede utilizar prototipo (prototype).

Prototipos

La declaracion de una funcion es el prototipo. El prototipo da un modelo de la interface a la funcion. Veamos un ejemplo:

# include <iostream.h>

void haz_algo (int alas, float pies, char ojos);

 

main() {

int ala = 2;

float pie = 1000.0;

char ojo = 2;

 

haz_algo (3, 12.0, 4);

haz_algo (ala, pie, ojo);

}

 

void haz_algo (int alas, float pies, char ojos) {

cout << 'Hay ' << alas << 'alas.' << 'n';

cout << 'Hay ' << pies << 'pies. ' << 'n';

cout << 'Hay ' << int(ojos) << 'ojos.' << 'n';

}

 

La salida de este programa sera:

Hay 3 alas.

Hay 12 pies.

Hay 4 ojos.

 

Hay 2 alas.

Hay 1000 pies.

Hay 2 ojos.

 

Cada llamada a la funcion haz_algo() debe verificar:

El número de parametros debe ser exactamente tres.

Los tipos deben ser compatibles con los de la declaracion.

Notese que cuando llamamos a la funcion, la comprobacion de tipo la hace el compilador basandose en el prototipo (en la declaracion) puesto que la funcion todavía no ha sido definida.

Los nombres de variables que aparecen en el prototipo son opcionales y actúan casi como comentarios al lector del programa, ya que son completamente ignorados por el compilador.

 

Tipos compatibles

Son compatibles cualquiera de los tipos simples (definidos en C++) que pueden ser convertidos de uno a otro de manera significativa. Por ejemplo, si llamamos con un entero a una funcion que esta esperando un número real como parametro, el sistema lo convertira automaticamente, sin mencionarlo al usuario. Esto también es cierto de float a char, o de char a int.

En cambio, si pasamos un puntero a un entero a una funcion que estaba esperando un entero, no habra conversion de tipo, ya que son dos variables completamente distintas. De la misma forma, un tipo definido por el usuario (estructura o clase) no puede ser convertido automaticamente a un long float, a un array o incluso a otra estructura o clase diferente, porque son tipos incompatibles y no puede realizarse la conversion de manera significativa.

Sin embargo, el tipo devuelto por la funcion, void en el ejemplo anterior, debe ser compatible con el tipo que se espera que devuelva en la funcion de llamada, o el compilador dara un warning.

El uso de prototipos no supone coste alguno en tiempo ni en velocidad de ejecucion. El prototipo se verifica durante la compilacion.

Funciones con void como argumento.

Una funcion sin lista de argumentos como

void func ();

significa en C que no se ha declarado el tipo de la lista de argumentos que recibe la funcion, por lo que el compilador no producira errores respecto al uso impropio de los argumentos. Cuando en C se declara una funcion que no tiene argumentos se utiliza el tipo void:

void func (void);

En C++, ambas expresiones son equivalentes

 

Pasar punteros a funciones.(paso por valor y por referencia)

Cuando se llama a una funcion, todos los parametros con los que la llamamos son copiados y pasados a la funcion (paso por valor). Esto significa que si la funcion cambia el valor de los parametros, solo lo hace dentro del ambito de la funcion. Por ejemplo:

#include <iostream.h>

void change_values(int a,int b) {

a=4;

b=5;

}

main() {

int a, b;

 

a=1;

b=2;

change_values(a,b);

 

cout << 'A is ' << a <<',B is' << b <<'n';

}

 

La salida de programa es: A is 1, B is 2

La llamada a la funcion no ha cambiado el valor de las variables que se le han pasado. La funcion cambia las copias de lo que se le ha pasado.

 

Si queremos pasar parametros por referencia hay que pasar punteros a los datos. Para hacer esto, utilizamos el operador &, que da la direccion de una variable:

#include <iostream.h>

void change_values(int *a,int *b) {

*a=4;

*b=5;

}

main() {

int a, b;

a=1;

b=2;

change_values(&a,&b);

cout << 'A is ' << a <<',B is' << b <<'n';

}

 

Ahora la salida del programa es:

A is 4, B is 5

La funcion main pasa la direccion de a y b, por lo que a la funcion change_values se le pasa una copia de las direcciones. Utilizando las direcciones de a y b, la funcion puede acceder a los datos directamente.

 

Polimorfismo.

En C++ es posible declarar dos funciones diferentes que tengan el mismo nombre. Las funciones deben diferir en la lista de argumentos, bien en el número de variables que se pasan a la funcion, bien en el tipo de argumentos que recibe. Así, por ejemplo, se puede definir una funcion que trabaje, bien con enteros, bien con strings; solo hay que definir dos funciones separadas con el mismo nombre:

 

#include <iostream.h>

void show(int val) {

cout <<' Es un entero :'<< val << 'n';

}

 

void show(char *val) {

cout <<'Es un caracter: '<< val << 'n';

}

 

main() {

show (42);

show ('A');

show (452.2);

}

 

En la primera llamada a la funcion show, se le pasa un entero, por tanto se llama a la primera copia de la funcion show. La segunda vez, el argumento es un caracter, por tanto se utiliza la segunda definicion, aquella que utiliza un caracter. Ahora bien, la tercera llamada utiliza un número real, y no existe una definicion de la funcion para este caso. El compilador utiliza la primer definicion. La salida del programa es:

 

Es un entero :42

Es un caracter: A

Es un entero :452

 

Comentarios sobre la sobrecarga de funciones:

· El uso de mas de una funcion con el mismo nombre pero acciones diferentes debe ser evitado. En el ejemplo anterior, las funciones show() estan relacionadas: imprimen informacion en la pantalla.

· C++ no permite que varias funciones difieran solo en su valor devuelto. Dos funciones de este tipo no podrían ser distinguidas por el compilador.

 

Parametros por defecto

Es una forma de indicar qué valor debe ser pasado a una funcion en el caso en que en la llamada no se pase nada, o se pasen menos argumentos de los definidos. Un ejemplo de definicion de una funcion que tiene parametros por defecto en su lista de argumentos es:

void funcion (int y = 2)

En este caso, estamos definiendo un valor, 2, que tomara la variable y en caso de que no se pase nada en la llamada a la funcion:

funcion ();




 

DA CLICK EN LA IMAGEN



              


 

 

 

 
© 2024 FUNDAMENTOS DE PROGRAMACION