Repaso: Dispatch de calculadora
Parte de la sección Object Oriented Programming del Journey de C de Coddy — lección 37 de 61.
Desafío
FácilConstruye una calculadora utilizando una tabla de despacho (dispatch table). Crearás un arreglo de punteros a funciones que mapea códigos de operación a sus funciones correspondientes, y luego lo usarás para realizar cálculos.
Escribe un programa que:
- Cree un
typedefllamadoOperationpara un puntero a función que reciba dos parámetrosinty devuelva unint - Defina cuatro funciones aritméticas:
add— devuelve a + bsub— devuelve a - bmul— devuelve a * bdivide— devuelve a / b (división entera)
- En
main, cree una tabla de despacho: un arreglo de 4 punteros a funciones de tipoOperation, donde el índice 0 es add, el índice 1 es sub, el índice 2 es mul y el índice 3 es divide - Lea tres entradas: dos enteros y un código de operación (0-3)
- Use el código de operación para indexar en la tabla de despacho y llamar a la función apropiada
- Imprima el resultado
Recibirás tres entradas: el primer número, el segundo número y el código de operación (0 para add, 1 para sub, 2 para mul, 3 para divide).
Tu salida debe ser un único número entero—el resultado de la operación:
7En este ejemplo con las entradas 10, 3, 1: el código de operación 1 selecciona sub de la tabla de despacho, por lo que calculamos 10 - 3 = 7.
La clave aquí es usar la indexación del arreglo para seleccionar la función—no se necesitan sentencias if o switch. Tu tabla de despacho debería verse así:
Operation ops[4] = {add, sub, mul, divide};Luego llama a la función usando: ops[code](a, b)
Pruébalo tú mismo
#include <stdio.h>
// TODO: Crear un typedef llamado 'Operation' para un puntero de función
// que tome dos parámetros int y devuelva un int
// TODO: Definir las cuatro funciones aritméticas: add, sub, mul, divide
int main() {
// Leer entrada
int a, b, code;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &code);
// TODO: Crear la tabla de despacho (array de 4 punteros de función Operation)
// Operation ops[4] = { ... };
// TODO: Usar el código de operación para llamar a la función apropiada
// y almacenar el resultado
int result;
// Mostrar el resultado
printf("%d\n", result);
return 0;
}Todas las lecciones de Object Oriented Programming
1Fundamentos de programación modular
Archivos de cabeceraGuardas de inclusiónArchivos fuenteFunciones estáticasRepaso: Calculadora modular4Encapsulamiento
Concepto de punteros opacosDefinición de structs opacosGetters y SettersValidación en settersResumen: Caja secreta7Punteros a funciones
Declaración de punteros a funcionesLlamada a punteros a funcionesTypedef para punteros a funcionesPasar funciones como argumentosRepaso: Dispatch de calculadora10Contenedores genéricos
Repaso de punteros voidWrapper genéricoSwap genéricoComparación genéricaRepaso: Array genérico2Objetos y métodos
Structs como objetosEl puntero 'Self'Const CorrectnessPuntero vs. ValorMétodos auxiliaresResumen: Point Manager5Proyecto: Cuenta bancaria simple
Configuración del proyectoImplementación de la cuenta3Ciclo de vida de los objetos
Patrón ConstructorPatrón DestructorInicialización en StackCopia profundaResumen: String Wrapper6Herencia mediante composición
Incrustación de StructsLa regla del primer miembroAcceso a miembros padreUpcastingResumen: Jerarquía de formas9Proyecto: Dibujador de figuras
Descripción general del proyectoImplementación del círculo