Tutoriales

Ejemplo de functor C++

Las clases de C++ que operan como funciones se denominan functores. Utilice la misma sintaxis de llamada a funciones antigua para llamar a functores. Creamos un objeto que sobrecarga «operador()» para generar el functor. También podemos decir que un objeto que puede interpretarse como una función o un indicador de una función se llama funtor. Los functores son muy convenientes al modelar efectos de funciones utilizando valores de tipos de datos de parámetros. En este artículo, se estudiará en detalle el concepto de funtor junto con el código C++.

Ejemplo 1:

«iostream» es un archivo de encabezado que incluimos aquí porque tenemos que hacer uso de las funciones declaradas en este archivo de encabezado. El encabezado «iostream» contiene declaraciones de funciones. El espacio de nombres «std» también se agrega aquí. Luego, generamos una clase llamada «FunctorClass». Debajo de esto, escribimos «público», que es el constructor público, y colocamos la función «operador()». Luego, colocamos una oración que queremos mostrar en la pantalla en la declaración «cout».

Después de eso, llamamos a la función «main()» y creamos un objeto «FunctorClass» llamado «my_functor». Aquí, llamamos a la función «my_functor()» para que muestre la declaración que agregamos debajo de la función «operator()».

Código 1:

#incluir
usar espacio de nombres estándar;
clase clase funtor {

gente:

blanco operador()() {

kut «Aquí se llama a la acción»;
}
};
entero principal() {
Categoría de functor my_functor;
mi funtor();

devolver 0;
}

Producción:

Las líneas que agregamos en la función «operator()» de «FunctorClass» se muestran aquí usando el objeto funtor «my_functor».

Ejemplo 2:

Incluimos aquí el archivo de encabezado «iostream» porque el archivo de encabezado «iostream» contiene algunas declaraciones de funciones. También se inserta el espacio de nombres «std». A continuación, creamos una clase llamada «SquareClass».

Debajo, ingresamos «público», que es el constructor público, y colocamos la función «operador()» del tipo de datos «int» debajo. Pasamos la variable «val» del tipo de datos «int» a esta función «operator()». Cuando insertamos «val * val» en la función «return()» debajo de la función «operator()», la función devolverá el resultado de la multiplicación.

Ahora, aquí se llama a la función «main()». Luego, el objeto se crea aquí usando el nombre «s_functor» de la clase «SquareFunctor». Luego, usamos «cout» para ayudar a presentar la información. Después de eso, aquí llamamos al objeto «my_functor()» como una función y devuelve el resultado de la multiplicación de «5 * 5» porque agregamos «5» como parámetro al llamarlo.

Código 2:

#incluir
usar espacio de nombres estándar;
clase tipo cuadrado {

gente:

entero operador()(entero vale) {

devolver (vale * vale);

}
};
entero principal() {

Clase cuadrada s_functor;

kut «El cuadrado de un valor dado es» endel;
kut s_functor(5);

devolver 0;
}

Producción:

Obtenemos el resultado después de llamar al objeto «my_functor» de la clase «SqaureClass» (como la función «my_functor()») y pasar «5». Obtenemos «25» como el cuadrado del número «5».

Ejemplo 3:

El encabezado «iostream» se incluye aquí porque contiene declaraciones de funciones y el espacio de nombres «std» se presenta más adelante. Luego crea la clase «ProductFunctor». Debajo se encuentra el constructor público «public» y debajo la función «operator()» del tipo de datos «int». Reescribimos esta función aquí y le pasamos dos parámetros: «int var1» e «int var2».

Luego, usamos el siguiente «retorno» para multiplicar las dos variables y devolver el resultado de la multiplicación de los dos números «var1 * var2». Luego, llamando aquí a la función «main()», generamos un objeto de clase llamado «P_functor» de la clase «ProductFunctor». Luego inicializamos una nueva variable llamada «pro_result» y asignamos el objeto «P_functor» a la función «P_functor()» después de la llamada.

Pasamos «28» y «63» como parámetros. Esto multiplicará los dos valores y guardará el resultado en la variable «pro_result», imprimimos la variable a continuación usando «cout» y pasando «pro_result» en ella.

Código 3:

#incluir
usar espacio de nombres estándar;
clase funtor de producto {
gente:
entero operador()(entero variable 1, entero Variable 2) {
devolver Variable 1 * Variable 2;
}
};
entero principal() {
Función del producto P_functor;
entero resultados del producto = P_functor(28, 63);
kut «El producto es:» resultados del producto endel;
devolver 0;
}

Producción:

Después de llamar al objeto «P_functor» como función «P_functor()» y pasarle el valor, obtenemos el producto. El producto de estos valores es «1764».

Ejemplo 4:

Produce «GreetingFunctorClass» en este caso. Luego insertamos el constructor «público» y anulamos la función «operador()» dentro de este constructor «público». Escribimos «¡Hola!» después de colocar «cout» debajo de la función «operador()». Aquí soy un programador de C++.

Ahora llamamos «principal()». Aquí creamos «g_functor» como un objeto de «GreetingFunctorClass» y luego llamamos a este objeto «g_functor» como la función «g_functor()». Esto da el resultado que agregamos al anular la función «operador()».

Código 4:

#incluir
usar espacio de nombres estándar;
usar espacio de nombres estándar;
clase Clase de functor de saludo {
gente:
blanco operador()() {
kut «¡Hola! Soy programador de C++ aquí»;
}
};
entero principal() {
SaludoFunctor clase g_functor;
g_functor();
devolver 0;
}

Producción:

Aquí, podemos notar que cuando llamamos al objeto de clase como una función, las nuevas declaraciones cuando anulamos la función «operador()» en el código se muestran aquí.

Ejemplo 5:

Esta vez incluya «bits/stdc++.h», ya que contiene todas las declaraciones de funciones necesarias. Luego, el espacio de nombres «std» se coloca aquí. La clase que creamos aquí es la clase «incrementFunctor». Luego, creamos un constructor «privado» e inicializamos la variable «int_num» usando el tipo de datos «int».

Debajo del constructor «público» colocamos «incrementFunctor» y le pasamos «int n1». Luego ingresamos «int_num(n1)» después de colocar el «:». Luego, anulamos la función «operator()» del tipo de datos «int» y declaramos «int arrOfNum» aquí. Luego usamos «return» e insertamos «int_num + arrOfNum». Ahora, esto incrementará el valor de «arrOfNum», le agregará el valor «int_num» y luego los devolverá aquí.

Después de llamar a «main()», inicializamos «arrOfNum» y asignamos aquí diferentes valores enteros. Luego, se inicializa la variable «n1» y agregamos la función «sizeof», como por ejemplo «sizeof(arrOfNum)/sizeof(arrOfNum[0])». A partir de entonces, «additionNumber» se inicializa en «3». Ahora usamos la función «transformar()». Esta «transformación()» es lo mismo que crear un objeto de la clase «increamentFunctor» y luego llamar a su objeto. Después de eso usamos el bucle «for» y luego «cout» «arrOfNum»[i]”.

Código 5:

#incluir
usar espacio de nombres estándar;
clase funtor incremental
{
privado:

entero número entero;
gente:

funtor incremental(entero n1) : número entero(n1) { }

entero operador () (entero arrOfNum) constante {

devolver número entero + arrOfNum;

}
};
entero principal()
{

entero arrOfNum[] = {6, 3, 2, 1, 9, 0, 8};

entero n1 = tamaño(arrOfNum)/tamaño(arrOfNum[0]);

entero Suplemento = 3;

Convertir(arrOfNum, arrOfNum+n1, arrOfNum, funtor incremental(Suplemento));

para (entero I=0; In1; I++)
kut arrOfNum[i] «»;
}

Producción:

El resultado del código se muestra a continuación, donde «incrementFunctor» es el «Functor» utilizado como función.

Ejemplo 6:

En este código, utilizamos el functor «más grande» predefinido. Aquí, incluimos cuatro archivos de encabezado diferentes en nuestro código porque las funciones o métodos que necesitamos en nuestro código se declaran en ellos. Luego, después de agregar «std» y llamar a «main()», inicializamos el vector «myIntegerVector». Insertamos algunos valores sin clasificar en este vector. A continuación, aplicamos la función «ordenar» para ordenar estos valores vectoriales.

Cuando usamos esta función, ordena los valores en orden ascendente. Pero aquí usamos «más grande», que es una función predefinida en C++ que da el resultado ordenado en orden descendente. Después de eso, mostramos los valores ordenados con la ayuda del bucle «for» y «cout».

Código 6:

#incluir
#incluir
#incluir
#incluir
usar espacio de nombres estándar;

entero principal() {
vectorentero> mi vector de números enteros = {13, veintiuno, No 19, 44, 32, 42, 9, 6};
tipo(Mi vector de números enteros.comenzar()mi vector de números enteros.fin()más grande entero > ());
para (entero número vectorial: mi vector de números enteros) {
kut número vectorial «»;
}
devolver 0;
}

Producción:

Todos los valores del vector se ordenan en orden descendente utilizando un funtor predefinido en C++ (el funtor «más grande»), cuya definición se puede encontrar en el archivo de encabezado «Función».

en conclusión

Este artículo explora en profundidad el concepto de «functor C++». Vimos cómo se puede llamar a un objeto como una función, para sobrecargar una función llamada «operador()». Esto se llama funtor. Se debe proporcionar acceso público para que las sobrecargas de «operator()» se utilicen como se esperaba. Ilustramos diferentes ejemplos del uso de «functores» y «functores» predefinidos en su código.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba