Fonksiyonları Argüman Olarak Geçirme
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 36 / 61.
İşaretçi fonksiyonların en güçlü kullanımlarından biri, onları diğer fonksiyonlara bağımsız değişken olarak geçirmektir. Bu, kodunu değiştirmeden bir fonksiyona özel davranış eklemenizi sağlar: bazen geri çağırma olarak adlandırılan bir teknik.
İki sayı üzerinde hesaplama yapan bir fonksiyonu düşünün. İşlemi sabit olarak kodlamak yerine, gerçekleştirilecek işlemi tanımlayan bir fonksiyon işaretçisini kabul edebilirsiniz:
typedef int (*Operation)(int, int);
int compute(int a, int b, Operation op) {
return op(a, b);
}compute işlevi toplama mı, çıkarma mı yoksa tamamen başka bir işlem mi yaptığını bilmez. Kendisine geçirilen işlevi çağırır:
int add(int a, int b) { return a + b; }
int multiply(int a, int b) { return a * b; }
int main() {
printf("%d\n", compute(5, 3, add)); // Çıktı: 8
printf("%d\n", compute(5, 3, multiply)); // Çıktı: 15
return 0;
}Aynı compute işlevinin, hangi işlevi geçirdiğimize bağlı olarak farklı sonuçlar ürettiğine dikkat edin. Bu kalıp, esnek ve yeniden kullanılabilir kod yazmanın temelidir. Yapıyı bir kez yazarsınız ve işlevinizin kullanıcıları ihtiyaç duydukları özel mantığı sağlar.
Görev
Kolayİki tamsayı ve bir işlem kodu alan, işlemi sayılara sırayla iki kez uygulayan ve son sonucu döndüren bir apply_twice fonksiyonu yazın.
Fonksiyonunuz, hangi işlemin kullanılacağını belirleyen bir işlem kodu alacaktır. İşlem fonksiyonlarını çözümünüzün içinde tanımlamalı ve bunları bir fonksiyon işaretçisi kabul eden yardımcı compute fonksiyonuna geçirmelisiniz.
Not: yalnızca fonksiyonlar gereklidir. Testler doğrudan apply_twice fonksiyonunu çağırıp dönüş değerini kontrol eder; bu nedenle girdi okumayın veya herhangi bir şey yazdırmayın.
Gerekli yapı:
- İki
intparametresi alan ve birintdöndüren bir fonksiyon işaretçisi içinOperationadlı birtypedeftanımlayın - İki işlem fonksiyonu tanımlayın:
add(a + b döndürür) vemultiply(a * b döndürür) - İki tamsayı ve bir
Operationfonksiyon işaretçisi alan, ardından işlemi çağırmanın sonucunu döndüren bircomputefonksiyonu tanımlayın apply_twiceiçinde koda göre uygun işlemi seçin, ardındancomputefonksiyonunu iki kez kullanın: önce başlangıçtaki sayılarla, sonra sonuç ve ikinci sayıyla tekrar
Mantık:
op_codedeğerine göre işlem fonksiyonunu seçin (1 = add, 2 = multiply)- Ara sonucu elde etmek için
compute(a, b, operation)çağrısını yapın - Sonucu elde etmek için
compute(intermediate, b, operation)çağrısını yapın - Sonucu döndürün
Parametreler:
a(int): İlk sayıb(int): İkinci sayıop_code(int): İşlem kodu (add için 1, multiply için 2)
Döndürür: İşlemin sırayla iki kez uygulanmasından sonraki sonuç (int)
Örnek: a = 5, b = 3, op_code = 1 (add) için:
- İlk hesaplama: 5 + 3 = 8
- İkinci hesaplama: 8 + 3 = 11
- Döndür: 11
a = 2, b = 4, op_code = 2 (multiply) için:
- İlk hesaplama: 2 × 4 = 8
- İkinci hesaplama: 8 × 4 = 32
- Döndür: 32
Kendin dene
int apply_twice(int a, int b, int op_code) {
// Kodu buraya yazın
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama 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şisiKendi başına pratik yap: Online C derleyicisi