Fonksiyon İşaretçilerini Tanımlama
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 33 / 61.
Şimdiye kadar struct gömmeyi kullanarak kalıtımı simüle etmeyi öğrendik. Ancak farklı nesnelerin aynı çağrıya farklı şekilde yanıt verdiği gerçek çok biçimlilik için daha fazlası gerekir: işlev işaretçileri.
Fonksiyon işaretçisi, bir fonksiyonun adresini depolayan bir değişkendir. Normal bir işaretçinin verilerin adresini tutması gibi, bir fonksiyon işaretçisi de yürütülebilir kodun adresini tutar.
Sözdizimi ilk başta göz korkutucu görünebilir. Bir işlev işaretçisi bildirmek için dönüş türünü, ardından parantez içinde yıldız işaretiyle işaretçi adını ve son olarak parametre türlerini belirtirsiniz:
int (*operation)(int, int);Bu, iki int parametresi alan ve bir int döndüren herhangi bir işleve işaret edebilen operation adlı bir değişken tanımlar. *operation çevresindeki parantezler çok önemlidir; bunlar olmadan bir işaretçi döndüren bir işlev tanımlamış olurdunuz.
Bu işaretçiye bir işlev atamak için işlevin adını (parantezler olmadan) kullanmanız yeterlidir:
int add(int a, int b) {
return a + b;
}
int (*operation)(int, int);
operation = add; // Şimdi operation, add'e işaret ediyorFonksiyon adı, adresi olarak işlev görür. Ayrıca açıkça &add kullanabilirsin, ancak bu isteğe bağlıdır: C'de her iki biçim de eşdeğerdir.
Görev
Kolayİşlev işaretçilerini tanımlama ve işlevleri bunlara atama alıştırması yapalım. Bir işlev işaretçisinin farklı aritmetik işlevleri tutabildiği basit bir matematik işlemi sistemi oluşturacaksın.
Şunları yapan bir program yaz:
- İki işlev tanımla:
multiply: ikiintparametresi alır ve bunların çarpımını döndürürsubtract: ikiintparametresi alır ve birinciden ikincinin çıkarılmasının sonucunu döndürür
mainiçinde, ikioperationparametresi alan ve birintdöndüren işlevleri gösterebilenintadlı bir işlev işaretçisi değişkeni tanımla- Üç girdi oku: iki tam sayı ve bir işlem kodu (çarpma için 1, çıkarma için 2)
- İşlem koduna bağlı olarak uygun işlevi
operationişaretçine ata - Atanan işlemin adını yazdır, ardından işlevi işaretçi üzerinden çağırmanın sonucunu yazdır
Üç girdi alacaksın: ilk sayı, ikinci sayı ve işlem kodu (1 veya 2).
Çıktın şu şekilde görünmelidir:
Operation: multiply
Result: 35Burada multiply işlem adıdır (kod 2 ise subtract) ve 35, işlevin işaretçin üzerinden çağrılmasının sonucudur (bu durumda 5 × 7).
Unutma: işlev işaretçisini tanımlamak için dönüş türüne, parantez içinde yıldız işaretiyle birlikte işaretçi adına ve parametre türlerine ihtiyacın vardır. Bir işlev atamak için parantezleri olmadan yalnızca işlev adını kullan.
Kendin dene
#include <stdio.h>
// TODO: multiply fonksiyonunu burada tanımla
// TODO: subtract fonksiyonunu burada tanımla
int main() {
int num1, num2, code;
// Girdiyi oku
scanf("%d", &num1);
scanf("%d", &num2);
scanf("%d", &code);
// TODO: 'operation' adında, işaret edebilecek bir fonksiyon işaretçisi bildir
// iki int parametre alan ve bir int döndüren fonksiyonlara
// TODO: İşlem koduna göre (1 multiply için, 2 subtract için),
// uygun fonksiyonu operation işaretçinize atayın
// TODO: İşlem adını ve sonucu yazdır
// Biçim:
// Operation: <name>
// Result: <result>
return 0;
}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