functions c with types examples
Tipos de funciones en C ++ junto con sus usos.
En nuestros tutoriales anteriores hasta ahora, hemos visto los diversos conceptos en C ++ como variables, clases de almacenamiento, operadores, matrices, cadenas, etc.
En este tutorial, avanzaremos y discutiremos el concepto de funciones. Las funciones también se denominan métodos, subrutinas o procedimientos.
=> Lea aquí la extensa serie de tutoriales de capacitación en C ++.
Lo que vas a aprender:
- ¿Cómo definimos una función?
- Tipos de funciones en C ++
- Declaración de función
- Definición de función
- Llamar a una función
- Parámetros formales y reales
- Valores devueltos
- Funciones nulas
- Pasar parámetros a funciones
- Parámetros predeterminados
- Parámetros de constante
- Funciones en línea
- Usar estructuras en funciones
- Conclusión
- Lectura recomendada
¿Cómo definimos una función?
Una función es un conjunto de declaraciones que se juntan para realizar una tarea específica. Pueden ser declaraciones que realizan algunas tareas repetidas o declaraciones que realizan algunas tareas especializadas como imprimir, etc.
Un uso de tener funciones es simplificar el código dividiéndolo en unidades más pequeñas llamadas funciones. Otra idea detrás del uso de funciones es que nos ahorra escribir el mismo código una y otra vez. Solo tenemos que escribir una función y luego llamarla cuando sea necesario sin tener que escribir el mismo conjunto de declaraciones una y otra vez.
Tipos de funciones en C ++
En C ++, tenemos dos tipos de funciones como se muestra a continuación.
Funciones integradas
Las funciones integradas también se denominan funciones de biblioteca. Estas son las funciones que proporciona C ++ y no es necesario que las escribamos nosotros mismos. Podemos usar estas funciones directamente en nuestro código.
Estas funciones se colocan en los archivos de encabezado de C ++. Por ejemplo ,, son los encabezados que tienen funciones matemáticas integradas y funciones de cadena, respectivamente.
Veamos un ejemplo del uso de funciones integradas en un programa.
|_+_|Producción:
Ingrese la cadena de entrada: Ayuda para pruebas de software
Cadena ingresada: ¡Ayuda para pruebas de software!
Tamaño de la cuerda: 21
Aquí estamos usando los encabezados y. Los tipos de datos y otras funciones de entrada / salida se definen en la biblioteca. Las funciones de cadena que se utilizan como getline, size son parte del encabezado.
Funciones definidas por el usuario
C ++ también permite a sus usuarios definir sus propias funciones. Estas son las funciones definidas por el usuario. Podemos definir las funciones en cualquier parte del programa y luego llamar a estas funciones desde cualquier parte del código. Al igual que las variables, debe declararse antes de usar, las funciones también deben declararse antes de ser llamadas.
Analicemos las funciones definidas por el usuario en detalle.
La sintaxis general para funciones definidas por el usuario (o simplemente funciones) es la siguiente:
|_+_|Entonces, como se muestra arriba, cada función tiene:
- Tipo de retorno: Es el valor que las funciones devuelven a la función que llama después de realizar una tarea específica.
- nombre de la función : Identificador utilizado para nombrar una función.
- Lista de parámetros: Denotado por param1, param2,… paramn en la sintaxis anterior. Estos son los argumentos que se pasan a la función cuando se realiza una llamada a la función. La lista de parámetros es opcional, es decir, podemos tener funciones que no tienen parámetros.
- Cuerpo de función: Conjunto de enunciados que realizan una tarea específica.
Como ya se mencionó, necesitamos 'declarar' una función antes de usarla.
Declaración de función
Una declaración de función le dice al compilador sobre el tipo de retorno de la función, el número de parámetros usados por la función y sus tipos de datos. Incluyendo los nombres de los parámetros en la función, la declaración es opcional. La declaración de función también se llama como prototipo de función.
A continuación, le damos algunos ejemplos de la declaración de función para su referencia.
|_+_|La declaración anterior es de una función 'suma' que toma dos enteros como parámetros y devuelve un valor entero.
|_+_|Esto significa que la función de intercambio toma dos parámetros de tipo int y no devuelve ningún valor y, por lo tanto, el tipo de retorno es nulo.
|_+_|La visualización de la función no toma ningún parámetro y tampoco devuelve ningún tipo.
Definición de función
La definición de una función contiene todo lo que contiene una declaración de función y, además, también contiene el cuerpo de la función entre llaves ({}).
Además, también debería tener parámetros con nombre. Cuando se llama a la función, el control del programa pasa a la definición de la función para que se pueda ejecutar el código de la función. Cuando finaliza la ejecución de la función, el control vuelve al punto donde se llamó a la función.
Para la declaración anterior de la función de intercambio, la definición es la siguiente:
|_+_|Tenga en cuenta que la declaración y la definición de una función pueden ir juntas. Si definimos una función antes de hacer referencia a ella, entonces no hay necesidad de una declaración por separado.
Tomemos un ejemplo de programación completo para demostrar una función.
|_+_|Producción:
Ingrese los dos números que se intercambiarán: 5 3
a = 5 b = 3
Después del intercambio: a = 3 b = 5
En el ejemplo anterior, vemos que hay una función de intercambio que toma dos parámetros de tipo int y no devuelve nada. Su tipo de retorno es nulo. Como hemos definido esta función antes de la función main, que es una función de llamada, no la hemos declarado por separado.
En la función main, leemos dos enteros y luego llamamos a la función swap pasándole estos dos enteros. En la función de intercambio, los dos números enteros se intercambian utilizando una lógica estándar y los valores intercambiados se imprimen.
Llamar a una función
Cuando tenemos una función en nuestro programa, dependiendo del requisito, necesitamos llamar o invocar esta función. Solo cuando se llama o invoca la función, la función ejecutará su conjunto de declaraciones para proporcionar los resultados deseados.
La función se puede llamar desde cualquier lugar del programa. Se puede llamar desde la función principal o desde cualquier otra función si el programa está usando más de una función. La función que llama a otra función se denomina 'Función de llamada'.
En el ejemplo anterior de intercambio de números, la función de intercambio se llama en la función principal. Por tanto, la función principal se convierte en la función de llamada.
Parámetros formales y reales
Ya hemos visto que podemos tener parámetros para las funciones. Los parámetros de la función se proporcionan en la definición de la función como una lista de parámetros que sigue al nombre de la función. Cuando se llama a la función tenemos que pasar los valores reales de estos parámetros para que utilizando estos valores reales la función pueda realizar su tarea.
Los parámetros que se definen en la definición de la función se llaman Parámetros formales . Los parámetros en la llamada de función que son los valores reales se llaman Parámetros reales.
En el ejemplo anterior de intercambio de números, hemos escrito los comentarios para parámetros formales y reales. En la función de llamada, es decir, principal, el valor de dos enteros se lee y se pasa a la función de intercambio. Estos son los parámetros reales.
Podemos ver las definiciones de estos parámetros en la primera línea de la definición de la función. Estos son los parámetros formales.
Tenga en cuenta que el tipo de argumentos formales y reales debe coincidir. El orden de los parámetros formales y reales también debe coincidir.
Valores devueltos
Una vez que la función realiza su tarea prevista, debe devolver el resultado a la función que llama. Para esto, necesitamos el tipo de retorno de la función. La función puede devolver un solo valor a la función que llama. El tipo de retorno de la función se declara junto con el prototipo de la función.
cómo abrir un archivo binario
Tomemos un ejemplo de sumar dos números para demostrar los tipos de devolución.
|_+_|Producción:
Ingrese los dos números que se agregarán: 11 11
Suma de los dos números: 22
En el ejemplo anterior, tenemos una función suma que toma dos parámetros enteros y devuelve un tipo entero. En la función principal, leemos dos enteros de la entrada de la consola y los pasamos a la función de suma. Como el tipo de retorno es un entero, tenemos una variable de resultado en LHS y RHS es una llamada a función.
Cuando se ejecuta una función, la expresión (a + b) devuelta por la función suma se asigna a la variable de resultado. Esto muestra cómo se usa el valor de retorno de la función.
Funciones nulas
Hemos visto que la sintaxis general de la función requiere que se defina un tipo de retorno. Pero si en el caso de que tengamos una función de este tipo que no devuelva ningún valor, en ese caso, ¿qué especificamos como tipo de retorno? La respuesta es que utilizamos el tipo sin valor 'void' para indicar que la función no devuelve un valor.
En tal caso, la función se llama 'función nula' y su prototipo será como
void functionName (param1, param2,… .param 3);
Nota : Se considera una buena práctica incluir una declaración 'devolver'; al final de la función de vacío para mayor claridad.
Pasar parámetros a funciones
Ya hemos visto el concepto de parámetros reales y formales. También sabemos que los parámetros reales pasan valores a una función que es recibida por los parámetros de formato. A esto se le llama pasar parámetros.
En C ++, tenemos ciertas formas de pasar parámetros como se explica a continuación.
Pasar por valor
En el programa para intercambiar dos enteros que discutimos anteriormente, hemos visto que simplemente leemos los enteros 'a' y 'b' en main y los pasamos a la función de intercambio. Esta es la técnica de pasar por valor.
En la técnica de paso por valor de paso de parámetros, las copias de los valores de los parámetros reales se pasan a los parámetros formales. Debido a esto, los parámetros reales y formales se almacenan en diferentes ubicaciones de memoria. Por lo tanto, los cambios realizados en los parámetros formales dentro de la función no se reflejan fuera de la función.
Podemos entender esto mejor visitando una vez más el intercambio de dos números.
|_+_|Producción:
Ingrese los dos números que se intercambiarán: 3 2
a = 3 b = 2
Después de cambiar dentro de Swap:
a = 2 b = 3
Después de cambiar dentro de Main:
a = 3 b = 2
Simplemente hemos modificado el programa anterior para imprimir los valores de los parámetros formales y los parámetros reales antes y después de la llamada a la función.
Como se ve en la salida, pasamos los valores a = 3 y b = 2 inicialmente. Estos son los parámetros reales. Luego, después de intercambiar dentro de la función de intercambio, vemos que los valores en realidad se intercambian y a = 2 y b = 3.
Sin embargo, después de la llamada a la función para intercambiar, en la función principal, los valores de ayb siguen siendo 3 y 2 respectivamente. Esto se debe a que los parámetros reales pasados a la función donde tiene una copia de las variables. Por lo tanto, aunque los parámetros formales se intercambiaron en la función de intercambio, no se reflejaron.
Aunque la técnica Pasar por valor es la más básica y ampliamente utilizada, debido a la limitación anterior, solo podemos usarla en los casos en que no requerimos que la función cambie los valores al llamar a la función.
Pasar por referencia
Pasar por referencia es otra técnica utilizada por C ++ para pasar parámetros a funciones. En esta técnica, en lugar de pasar copias de parámetros reales, pasamos referencias a parámetros reales.
Nota: Las referencias no son más que alias de variables o, en palabras simples, es otro nombre que se le da a una variable. Por tanto, una variable y su referencia comparten la misma ubicación de memoria. Aprenderemos las referencias en detalle en nuestro tutorial posterior.
En la técnica de paso por referencia, utilizamos estas referencias de parámetros reales y, como resultado, los cambios realizados en los parámetros formales de la función se reflejan en la función que llama.
Modificamos nuestra función de intercambio para que nuestros lectores comprendan mejor el concepto.
cuál es un buen descargador de música gratuito|_+_|
Producción:
Introduzca los dos números que se intercambiarán: 25 50
a = 25 b = 50
Después de cambiar dentro de Main:
a = 50 b = 25
Nota: La técnica de paso por referencia que se muestra en el ejemplo anterior. Podemos ver que los parámetros reales se pasan tal cual. Pero agregamos un carácter '&' a los parámetros formales indicando que es una referencia que estamos usando para este parámetro en particular.
Por lo tanto, los cambios realizados en los parámetros formales en la función de intercambio se reflejan en la función principal y obtenemos los valores intercambiados.
Pasar por puntero
En C ++, también podemos pasar parámetros a la función usando variables de puntero. La técnica de pasar por puntero produce los mismos resultados que la de pasar por referencia. Esto significa que tanto los parámetros formales como los reales comparten las mismas ubicaciones de memoria y los cambios realizados en la función se reflejan en la función de llamada.
La única diferencia es que en una pasada por referencia tratamos con referencias o alias de parámetros mientras que en una técnica de pasada por puntero usamos variables de puntero para pasar los parámetros.
Las variables de puntero difieren con las referencias en las que las variables de puntero apuntan a una variable en particular y, a diferencia de las referencias, podemos cambiar la variable a la que apunta. Exploraremos los detalles del puntero en nuestros tutoriales posteriores.
Presentamos nuevamente el intercambio de dos números enteros para demostrar la técnica Pass by Pointer.
|_+_|Producción:
Introduzca los dos números a intercambiar: 23 54
a = 23 b = 54
Después de cambiar dentro de Main:
a = 54 b = 23
Por lo tanto, como ya se dijo, no hay diferencia en la salida del programa. La única diferencia está en la forma en que se pasan los parámetros. Podemos notar que los parámetros formales son variables de puntero aquí.
Parámetros predeterminados
En C ++, podemos proporcionar valores predeterminados para los parámetros de función. En este caso, cuando invocamos la función, no especificamos parámetros. En cambio, la función toma los parámetros predeterminados que se proporcionan en el prototipo.
El siguiente ejemplo demuestra el uso de parámetros predeterminados.
|_+_|Producción:
Ingrese valores para a, byc: 10 4 6
Llamar a la operación con 1 arg: 15
Llamar a la operación con 2 arg: 20
Llamar a la operación con 3 arg: 6
Como se muestra en el ejemplo de código, tenemos una función 'mathoperation' que toma tres parámetros de los cuales hemos proporcionado valores predeterminados para dos parámetros. Luego, en la función principal, llamamos a esta función tres veces con una lista de argumentos diferente.
La primera llamada es con un solo argumento. En este caso, los otros dos argumentos tendrán valores predeterminados. La siguiente llamada es con dos argumentos. En este caso, el tercer argumento tendrá un valor predeterminado. La tercera llamada es con tres argumentos. En este caso, como hemos proporcionado los tres argumentos, se ignorarán los valores predeterminados.
Tenga en cuenta que mientras proporcionamos parámetros predeterminados, siempre comenzamos desde el parámetro más a la derecha. Además, no podemos omitir un parámetro intermedio y proporcionar un valor predeterminado para el siguiente parámetro.
Pasemos ahora a algunos conceptos relacionados con funciones especiales que son importantes desde el punto de vista de un programador.
Parámetros de constante
También podemos pasar parámetros constantes a funciones usando la palabra clave 'const'. Cuando un parámetro o referencia es constante, no se puede cambiar dentro de la función.
Tenga en cuenta que no podemos pasar un parámetro const a un parámetro formal no constante. Pero podemos pasar los parámetros const y no const a un parámetro formal const.
Del mismo modo, también podemos tener const return-type. En este caso, también, el tipo de retorno no se puede modificar.
Veamos un ejemplo de código que usa referencias constantes.
|_+_|Producción:
Ingrese los dos números que se intercambiarán: 22 33
a = 2 b = 33
Resultado de la suma: 55
En el programa anterior, tenemos parámetros formales constantes. Tenga en cuenta que los parámetros reales son variables ordinarias no constantes que hemos pasado con éxito. Como los parámetros formales son constantes, no podemos modificarlos dentro de la función. Así que simplemente realizamos la operación de suma y devolvemos el valor.
Si intentamos modificar los valores de aob dentro de la función, entonces el compilador emitirá un error.
Funciones en línea
Sabemos que para realizar una llamada a una función, internamente se requiere que un compilador almacene el estado del programa en una pila antes de pasar el control a la función.
Cuando la función regresa, el compilador tiene que recuperar el estado del programa y continuar desde donde lo dejó. Esto plantea una sobrecarga. Por lo tanto, en C ++ siempre que tengamos una función que consta de pocas declaraciones, existe una función que le permite expandirse en línea. Esto se hace haciendo una función en línea.
Entonces, las funciones en línea son las funciones que se expanden en tiempo de ejecución, lo que ahorra los esfuerzos para llamar a la función y realizar las modificaciones de la pila. Pero incluso si hacemos una función como en línea, el compilador no garantiza que se expandirá en tiempo de ejecución. En otras palabras, depende completamente del compilador hacer que la función esté en línea o no.
Algunos compiladores detectan funciones más pequeñas y las expanden en línea incluso si no están declaradas en línea.
A continuación se muestra un ejemplo de una función en línea.
|_+_|Como se muestra arriba, precedemos la definición de la función con una palabra clave 'en línea' para hacer una función en línea.
Usar estructuras en funciones
Podemos pasar variables de estructura como parámetros para que funcionen de una manera similar a la que pasamos variables ordinarias como parámetros.
Esto se muestra en el siguiente ejemplo.
|_+_|Producción:
Ingrese el nombre: Vedang
Ingrese la edad: 22
Ingrese salario: 45000.00
Estructura PersonInfo:
Edad: 22
Nombre: Vedang
Salario: 45000
Como se muestra en el programa anterior, pasamos una estructura para que funcione de manera similar a otras variables. Leemos los valores de los miembros de la estructura desde la entrada estándar y luego pasamos una estructura a una función que muestra la estructura.
Conclusión
Se trataba de los conceptos básicos de las funciones en C ++.
Exploraremos más sobre las funciones estáticas en C ++ en nuestros próximos tutoriales.
=> Consulte la serie completa de formación GRATUITA de C ++ aquí.
Lectura recomendada
- Funciones de Python
- Funciones de fecha y hora en C ++ con ejemplos
- Funciones de script de shell de Unix con parámetros y retorno
- Tutorial de Python DateTime con ejemplos
- Funciones importantes de LoadRunner utilizadas en scripts de VuGen con ejemplos
- Funciones de cadena de Python
- Tutorial de la función principal de Python con ejemplos prácticos
- Funciones de amigo en C ++