Riepilogo: dispatch della calcolatrice
Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 37 di 61.
Sfida
FacileCrea una calcolatrice usando una tabella di dispatch. Creerai un array di puntatori a funzione che associa i codici delle operazioni alle rispettive funzioni, quindi lo userai per eseguire i calcoli.
Scrivi un programma che:
- Crei un
typedefchiamatoOperationper un puntatore a funzione che accetta due parametriinte restituisce unint - Definisca quattro funzioni aritmetiche:
add: restituisce a + bsub: restituisce a - bmul: restituisce a * bdivide: restituisce a / b (divisione intera)
- In
main, crei una tabella di dispatch: un array di 4 puntatori a funzioneOperation, dove l'indice 0 corrisponde a add, l'indice 1 a sub, l'indice 2 a mul e l'indice 3 a divide - Legga tre input: due interi e un codice operazione (0-3)
- Usi il codice operazione come indice nella tabella di dispatch e chiami la funzione appropriata
- Stampi il risultato
Riceverai tre input: il primo numero, il secondo numero e il codice operazione (0 per add, 1 per sub, 2 per mul, 3 per divide).
L'output dovrà essere un singolo intero: il risultato dell'operazione:
7In questo esempio, con gli input 10, 3, 1: il codice operazione 1 seleziona sub dalla tabella di dispatch, quindi calcoliamo 10 - 3 = 7.
Il punto chiave è usare l'indicizzazione dell'array per selezionare la funzione: non servono istruzioni if o switch. La tua tabella di dispatch dovrebbe essere simile a:
Operation ops[4] = {add, sub, mul, divide};Poi chiama la funzione usando: ops[code](a, b)
Provalo tu
#include <stdio.h>
// TODO: Crea un typedef chiamato 'Operation' per un puntatore a funzione
// che accetta due parametri int e restituisce un int
// TODO: Definisci le quattro funzioni aritmetiche: add, sub, mul, divide
int main() {
// Leggi l'input
int a, b, code;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &code);
// TODO: Crea la tabella di dispatch (un array di 4 puntatori a funzione Operation)
// Operation ops[4] = { ... };
// TODO: Usa il codice dell'operazione per chiamare la funzione appropriata
// e memorizza il risultato
int result;
// Stampa il risultato
printf("%d\n", result);
return 0;
}Tutte le lezioni di Programmazione orientata agli oggetti
1Basi di programmazione modulare
File di intestazioneGuardie di inclusioneFile sorgenteFunzioni staticheRipasso: calcolatrice modulare4Incapsulamento
Il concetto di puntatori opachiDefinire struct opacheGetter e setterLa convalida nei setterRiepilogo: scatola segreta7Puntatori a funzione
Dichiarare puntatori a funzioneChiamare i puntatori a funzioneTypedef per puntatori a funzionePassare funzioni come argomentiRiepilogo: dispatch della calcolatrice2Oggetti e metodi
Le struct come oggettiIl puntatore 'Self'Correttezza constPuntatore o valoreMetodi di supportoRiepilogo: gestore di punti5Progetto: Conto bancario semplice
Configurazione del progettoImplementazione del conto8Polimorfismo
Puntatori a funzione nelle structSimulare i metodiIl concetto di interfacciaImplementare le interfacceIterazione polimorficaRiepilogo: Greeter11Pattern di progettazione in C
Pattern SingletonPattern FactoryPattern IteratorRiepilogo: Factory di Logger3Ciclo di vita degli oggetti
Pattern del costruttorePattern del distruttoreInizializzazione sullo stackCopia profondaRiepilogo: wrapper di stringhe6Ereditarietà tramite composizione
Incorporamento delle structLa regola del primo membroAccesso ai membri della classe baseUpcastingRiepilogo: gerarchia di forme9Progetto: Disegnatore di forme
Panoramica del progettoImplementazione del cerchioImplementazione del rettangoloUtilizzo polimorficoContenitore di formeEsercitati da solo: Compilatore C online