Podsumowanie: wybór działania kalkulatora
Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 37 z 61.
Wyzwanie
ŁatwyZbuduj kalkulator za pomocą tabeli dyspozycji. Utworzysz tablicę wskaźników do funkcji, która mapuje kody operacji na odpowiadające im funkcje, a następnie użyjesz jej do wykonywania obliczeń.
Napisz program, który:
- Tworzy
typedefo nazwieOperationdla wskaźnika do funkcji, która przyjmuje dwa parametry typuinti zwraca wartość typuint - Definiuje cztery funkcje arytmetyczne:
add: zwraca a + bsub: zwraca a - bmul: zwraca a * bdivide: zwraca a / b (dzielenie całkowite)
- W funkcji
maintworzy tabelę dyspozycji: tablicę 4 wskaźników do funkcji typuOperation, gdzie indeks 0 wskazuje na add, indeks 1 na sub, indeks 2 na mul, a indeks 3 na divide - Odczytuje trzy wartości wejściowe: dwie liczby całkowite i kod operacji (0-3)
- Używa kodu operacji jako indeksu tabeli dyspozycji i wywołuje odpowiednią funkcję
- Wyświetla wynik
Otrzymasz trzy wartości wejściowe: pierwszą liczbę, drugą liczbę i kod operacji (0 oznacza add, 1 oznacza sub, 2 oznacza mul, 3 oznacza divide).
Wynikiem powinna być jedna liczba całkowita: rezultat operacji:
7W tym przykładzie dla danych wejściowych 10, 3, 1 kod operacji 1 wybiera sub z tabeli dyspozycji, więc obliczamy 10 - 3 = 7.
Kluczowe jest tu użycie indeksowania tablicy do wyboru funkcji: nie są potrzebne instrukcje if ani switch. Tabela dyspozycji powinna wyglądać tak:
Operation ops[4] = {add, sub, mul, divide};Następnie wywołaj funkcję za pomocą: ops[code](a, b)
Spróbuj swoich sił
#include <stdio.h>
// TODO: Utwórz typedef o nazwie 'Operation' dla wskaźnika do funkcji
// która przyjmuje dwa parametry typu int i zwraca int
// TODO: Zdefiniuj cztery funkcje arytmetyczne: add, sub, mul, divide
int main() {
// Wczytaj dane wejściowe
int a, b, code;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &code);
// TODO: Utwórz tablicę dyspozycyjną (tablicę 4 wskaźników do funkcji typu Operation)
// Operation ops[4] = { ... };
// TODO: Użyj kodu operacji, aby wywołać odpowiednią funkcję
// i zapisz wynik
int result;
// Wyświetl wynik
printf("%d\n", result);
return 0;
}Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania modularnego
Pliki nagłówkoweZabezpieczenia przed wielokrotnym dołączeniemPliki źródłoweFunkcje statycznePodsumowanie: kalkulator modularny4Enkapsulacja
Koncepcja niejawnych wskaźnikówDefiniowanie niejawnych strukturGettery i setteryWalidacja w setterachPowtórka: tajemnicze pudełko7Wskaźniki do funkcji
Deklarowanie wskaźników do funkcjiWywoływanie funkcji przez wskaźnikiTypedef dla wskaźników do funkcjiPrzekazywanie funkcji jako argumentówPodsumowanie: wybór działania kalkulatora2Obiekty i metody
Struktury jako obiektyWskaźnik „self”Poprawność constWskaźnik czy wartośćMetody pomocniczePodsumowanie: menedżer punktów5Projekt: Proste konto bankowe
Konfiguracja projektuImplementacja konta8Polimorfizm
Wskaźniki do funkcji w strukturachSymulowanie metodKoncepcja interfejsuImplementowanie interfejsówIteracja polimorficznaPodsumowanie: Greeter11Wzorce projektowe w C
Wzorzec SingletonWzorzec fabrykiWzorzec iteratoraPodsumowanie: fabryka loggera3Cykl życia obiektu
Wzorzec konstruktoraWzorzec destruktoraInicjalizacja na stosieKopia głębokaPodsumowanie: klasa opakowująca ciąg znaków6Dziedziczenie przez kompozycję
Osadzanie strukturZasada pierwszego elementuDostęp do elementów klasy nadrzędnejKonwersja w górę hierarchiiPodsumowanie: hierarchia kształtów9Projekt: Rysownik kształtów
Przegląd projektuImplementacja kołaImplementacja prostokątaZastosowanie polimorfizmuKontener kształtówPoćwicz samodzielnie: Kompilator C online