Revisão: Despacho da Calculadora
Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 37 de 61.
Desafio
FácilCrie uma calculadora usando uma tabela de despacho. Você criará um array de ponteiros para funções que associa códigos de operação às funções correspondentes e, em seguida, o usará para realizar cálculos.
Escreva um programa que:
- Cria um
typedefchamadoOperationpara um ponteiro para função que recebe dois parâmetrosinte retorna umint - Define quatro funções aritméticas:
add: retorna a + bsub: retorna a - bmul: retorna a * bdivide: retorna a / b (divisão inteira)
- Em
main, cria uma tabela de despacho: um array de 4 ponteiros para funçõesOperation, em que o índice 0 é add, o índice 1 é sub, o índice 2 é mul e o índice 3 é divide - Lê três entradas: dois números inteiros e um código de operação (0-3)
- Usa o código de operação para indexar a tabela de despacho e chamar a função apropriada
- Imprime 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 número inteiro: o resultado da operação:
7Neste exemplo, com as entradas 10, 3, 1: o código de operação 1 seleciona sub na tabela de despacho, então calculamos 10 - 3 = 7.
O segredo aqui é usar a indexação de array para selecionar a função: não são necessárias instruções if ou switch. Sua tabela de despacho deve ser assim:
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() {
// Leia a 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;
// Exiba o resultado
printf("%d\n", result);
return 0;
}Todas as lições de Programação Orientada a Objetos
1Fundamentos da Programação Modular
Arquivos de cabeçalhoProteções de inclusãoArquivos-fonteFunções estáticasRevisão: calculadora modular4Encapsulamento
Conceito de ponteiros opacosDefinindo structs opacasGetters e settersValidação em settersRevisão: caixa secreta7Ponteiros para Funções
Declarando Ponteiros para FunçõesChamando Ponteiros para FunçõesTypedef para Ponteiros para FunçõesPassando Funções como ArgumentosRevisão: Despacho da Calculadora2Objetos e métodos
Structs como objetosO ponteiro 'Self'Correção de constPonteiro vs. valorMétodos auxiliaresRevisão: Gerenciador de pontos5Projeto: Conta Bancária Simples
Configuração do ProjetoImplementação da Conta3Ciclo de vida do objeto
Padrão de construtorPadrão de destrutorInicialização da pilhaCópia profundaRevisão: wrapper de String6Herança por composição
Incorporação de structRegra do primeiro membroAcessando membros do tipo paiUpcastingRevisão: hierarquia de formas9Projeto: Desenhador de Formas
Visão geral do projetoImplementação do círculoImplementação do retânguloUso polimórficoContêiner de formasPratique por conta própria: Compilador de C online