Özet: Hesap Makinesi Yönlendirme
Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 37 / 61.
Görev
KolayBir sevk tablosu (dispatch table) kullanarak bir hesap makinesi oluşturun. İşlem kodlarını ilgili fonksiyonlarıyla eşleştiren bir fonksiyon göstericileri (function pointers) dizisi oluşturacak ve ardından bunu hesaplamalar yapmak için kullanacaksınız.
Şunları yapan bir program yazın:
- İki
intparametresi alan ve birintdöndüren bir fonksiyon göstericisi içinOperationadında birtypedefoluşturur - Dört aritmetik fonksiyon tanımlar:
add— a + b döndürürsub— a - b döndürürmul— a * b döndürürdivide— a / b döndürür (tamsayı bölmesi)
mainiçinde bir sevk tablosu oluşturur: İndeks 0'ın add, indeks 1'in sub, indeks 2'in mul ve indeks 3'ün divide olduğu 4Operationfonksiyon göstericisinden oluşan bir dizi- Üç girdi okur: iki tamsayı ve bir işlem kodu (0-3)
- İşlem kodunu sevk tablosunda indeksleme yapmak ve uygun fonksiyonu çağırmak için kullanır
- Sonucu yazdırır
Üç girdi alacaksınız: birinci sayı, ikinci sayı ve işlem kodu (add için 0, sub için 1, mul için 2, divide için 3).
Çıktınız tek bir tamsayı — işlemin sonucu — olmalıdır:
710, 3, 1 girdilerinin olduğu bu örnekte: işlem kodu 1, sevk tablosundan sub fonksiyonunu seçer, böylece 10 - 3 = 7 hesaplarız.
Buradaki kilit nokta, fonksiyonu seçmek için dizi indekslemeyi kullanmaktır — if veya switch ifadelerine gerek yoktur. Sevk tablonuz şuna benzemelidir:
Operation ops[4] = {add, sub, mul, divide};Ardından fonksiyonu şu şekilde çağırın: ops[code](a, b)
Kendin dene
#include <stdio.h>
// TODO: İki adet int parametre alan ve bir int döndüren
// 'Operation' adında bir fonksiyon göstericisi (function pointer) için typedef oluşturun
// TODO: Dört aritmetik fonksiyonu tanımlayın: add, sub, mul, divide
int main() {
// Girdiyi oku
int a, b, code;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &code);
// TODO: Gönderim tablosunu (4 Operation fonksiyon göstericisinden oluşan dizi) oluşturun
// Operation ops[4] = { ... };
// TODO: Uygun fonksiyonu çağırmak için işlem kodunu kullanın
// ve sonucu saklayın
int result;
// Sonucu yazdır
printf("%d\n", result);
return 0;
}Object Oriented Programming bölümündeki tüm dersler
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu7Fonksiyon İşaretçileri
Fonksiyon İşaretçilerini TanımlamaFonksiyon İşaretçilerini ÇağırmaFonksiyon İşaretçileri için TypedefFonksiyonları Argüman Olarak GeçirmeÖzet: Hesap Makinesi Yönlendirme2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil Hiyerarşisi