Recapitulação: Dispatch de Calculadora
Parte da seção Object Oriented Programming do Journey de C da Coddy — lição 37 de 61.
Desafio
FácilConstrua uma calculadora usando uma tabela de despacho (dispatch table). Você criará um array de ponteiros de função que mapeia códigos de operação para suas funções correspondentes e, em seguida, o usará para realizar cálculos.
Escreva um programa que:
- Crie um
typedefchamadoOperationpara um ponteiro de função que recebe dois parâmetrosinte retorna umint - Defina quatro funções aritméticas:
add— retorna a + bsub— retorna a - bmul— retorna a * bdivide— retorna a / b (divisão inteira)
- No
main, crie uma tabela de despacho: um array de 4 ponteiros de funçãoOperation, onde o índice 0 é add, o índice 1 é sub, o índice 2 é mul e o índice 3 é divide - Leia três entradas: dois inteiros e um código de operação (0-3)
- Use o código de operação para indexar a tabela de despacho e chamar a função apropriada
- Imprima o resultado
Você receberá três entradas: o primeiro número, o segundo número e o código de operação (0 para add, 1 para sub, 2 para mul, 3 para divide).
Sua saída deve ser um único inteiro — o resultado da operação:
7Neste exemplo com as entradas 10, 3, 1: o código de operação 1 seleciona sub da tabela de despacho, então calculamos 10 - 3 = 7.
A chave aqui é usar a indexação do array para selecionar a função — sem a necessidade de comandos if ou switch. Sua tabela de despacho deve se parecer com:
Operation ops[4] = {add, sub, mul, divide};Em seguida, chame a função usando: ops[code](a, b)
Experimente você mesmo
#include <stdio.h>
// TODO: Crie um typedef chamado 'Operation' para um ponteiro de função
// que recebe dois parâmetros int e retorna um int
// TODO: Defina as quatro funções aritméticas: add, sub, mul, divide
int main() {
// Ler entrada
int a, b, code;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &code);
// TODO: Crie a tabela de despacho (array de 4 ponteiros de função Operation)
// Operation ops[4] = { ... };
// TODO: Use o código da operação para chamar a função apropriada
// e armazene o resultado
int result;
// Exibir o resultado
printf("%d\n", result);
return 0;
}Todas as lições de Object Oriented Programming
1Fundamentos da Programação Modular
Arquivos de CabeçalhoInclude GuardsArquivos-FonteFunções EstáticasRecapitulação: Calculadora Modular4Encapsulamento
Conceito de Ponteiros OpacosDefinindo Structs OpacasGetters e SettersValidação em SettersRecapitulação: Caixa Secreta7Ponteiros para Funções
Declarando Ponteiros para FunçõesChamando Ponteiros para FunçõesTypedef para Ponteiros para FunçõesPassando Funções como ArgumentosRecapitulação: Dispatch de Calculadora2Objetos e Métodos
Structs como ObjetosO Ponteiro 'Self'Const CorrectnessPonteiro vs ValorMétodos AuxiliaresRecapitulação: Point Manager5Projeto: Conta Bancária Simples
Configuração do ProjetoImplementação da Conta3Ciclo de Vida de Objetos
Padrão de ConstrutorPadrão de DestrutorInicialização na StackCópia ProfundaRecapitulação: String Wrapper6Herança via Composição
Incorporação de StructsA Regra do Primeiro MembroAcessando Membros PaiUpcastingRecapitulação: Hierarquia de Formas9Projeto: Desenhador de Formas
Visão Geral do ProjetoImplementação do Círculo