Zusammenfassung: Calculator Dispatch
Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 37 von 61.
Aufgabe
EinfachErstellen Sie einen Taschenrechner mithilfe einer Dispatch-Tabelle. Sie erstellen ein Array von Funktionszeigern, das Operationscodes ihren entsprechenden Funktionen zuordnet, und verwenden dieses dann zur Durchführung von Berechnungen.
Schreiben Sie ein Programm, das:
- Einen
typedefnamensOperationfür einen Funktionszeiger erstellt, der zweiint-Parameter entgegennimmt und einintzurückgibt - Vier arithmetische Funktionen definiert:
add— gibt a + b zurücksub— gibt a - b zurückmul— gibt a * b zurückdivide— gibt a / b zurück (Ganzzahldivision)
- In
maineine Dispatch-Tabelle erstellt: ein Array aus 4Operation-Funktionszeigern, wobei Index 0 add, Index 1 sub, Index 2 mul und Index 3 divide ist - Drei Eingaben liest: zwei Ganzzahlen und einen Operationscode (0-3)
- Den Operationscode verwendet, um in die Dispatch-Tabelle zu indizieren und die entsprechende Funktion aufzurufen
- Das Ergebnis ausgibt
Sie erhalten drei Eingaben: die erste Zahl, die zweite Zahl und den Operationscode (0 für add, 1 für sub, 2 für mul, 3 für divide).
Ihre Ausgabe sollte eine einzelne Ganzzahl sein – das Ergebnis der Operation:
7In diesem Beispiel mit den Eingaben 10, 3, 1: Der Operationscode 1 wählt sub aus der Dispatch-Tabelle aus, also berechnen wir 10 - 3 = 7.
Der Schlüssel hierbei ist die Verwendung der Array-Indizierung zur Auswahl der Funktion – es sind keine if- oder switch-Anweisungen erforderlich. Ihre Dispatch-Tabelle sollte wie folgt aussehen:
Operation ops[4] = {add, sub, mul, divide};Rufen Sie die Funktion dann auf mit: ops[code](a, b)
Probier es selbst
#include <stdio.h>
// TODO: Erstelle einen Typedef namens 'Operation' für einen Funktionszeiger,
// der zwei int-Parameter entgegennimmt und einen int zurückgibt
// TODO: Definiere die vier arithmetischen Funktionen: add, sub, mul, divide
int main() {
// Eingabe lesen
int a, b, code;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &code);
// TODO: Erstelle die Dispatch-Tabelle (Array aus 4 Operation-Funktionszeigern)
// Operation ops[4] = { ... };
// TODO: Verwende den Operationscode, um die entsprechende Funktion aufzurufen
// und speichere das Ergebnis
int result;
// Ergebnis ausgeben
printf("%d\n", result);
return 0;
}Alle Lektionen in Object Oriented Programming
1Grundlagen der modularen Programmierung
Header-DateienInclude GuardsQuelldateienStatische FunktionenWiederholung: Modularer Taschenrechner4Kapselung
Konzept der Opaque PointersOpaque Structs definierenGetter und SetterValidierung in SetternRückblick: Die geheime Box7Funktionszeiger
Funktionszeiger deklarierenFunktionszeiger aufrufenTypedef für FunktionszeigerFunktionen als Argumente übergebenZusammenfassung: Calculator Dispatch2Objekte und Methoden
Structs als ObjekteDer 'Self'-PointerConst-CorrectnessPointer vs. WertHilfsmethodenZusammenfassung: Point Manager5Projekt: Einfaches Bankkonto
Projekt-SetupImplementierung des Kontos3Objekt-Lebenszyklus
Konstruktor-MusterDestruktor-MusterStack-InitialisierungTiefe KopieRückblick: String-Wrapper6Vererbung durch Komposition
Struct-EinbettungDie First-Member-RegelZugriff auf Parent-MemberUpcastingRückblick: Formenhierarchie9Projekt: Formen-Zeichner
ProjektübersichtKreis-Implementierung