Function Pointers: Fonksiyonları Parametre Olarak Göndermek

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

Function Pointers: Fonksiyonların Adres Dünyası​


Bir fonksiyon isminin önüne parantez koymadığınızda (Örn: Topla yerine sadece Topla), o fonksiyonun bellek adresine erişmiş olursunuz. Fonksiyon göstericileri, bu adresi saklayan özel değişkenlerdir.



1. Fonksiyon Göstericisi Nasıl Tanımlanır?​


Tanımlama yaparken, göstericinin işaret edeceği fonksiyonun geri dönüş tipi ve parametreleri ile tam uyumlu olması gerekir.

C++:
// Normal bir fonksiyon
int Carp(int a, int b) { return a * b; }

// Fonksiyon göstericisi tanımı
// int -> Geri dönüş tipi
// (*ptr) -> Gösterici ismi
// (int, int) -> Aldığı parametreler
int (*ptr)(int, int) = Carp;

// Kullanımı
cout << ptr(5, 4); // Çıktı: 20



2. Fonksiyonu Parametre Olarak Göndermek (Callback)​


Bu yapının en güçlü olduğu yer, bir fonksiyona "ne yapması gerektiğini" başka bir fonksiyonla söylemektir. Buna genellikle Callback (Geri Çağırma) mekanizması denir.

C++:
void Selamla(string isim) {
cout << "Merhaba " << isim << endl;
}

// Bir fonksiyonu parametre olarak alan fonksiyon
void IslemYap(void (*fonksiyon)(string), string veri) {
fonksiyon(veri); // Gönderilen fonksiyonu çalıştırır
}

int main() {
IslemYap(Selamla, "Ahmet"); // Fonksiyon ismini parametre olarak yolladık
return 0;
}



3. Neden Kullanılır? (Gerçek Dünya Senaryoları)​



  • []Sıralama Algoritmaları: Bir listeyi neye göre (küçükten büyüğe mi, isme göre mi?) sıralayacağınızı belirleyen bir "karşılaştırma" fonksiyonunu dışarıdan gönderebilirsiniz.
    []Oyun Motorları: Bir butona tıklandığında hangi fonksiyonun çalışacağını (Event Handling) dinamik olarak belirlemek için.
  • API Tasarımı: Kullanıcının kendi fonksiyonlarını kütüphanenize entegre etmesine olanak tanır.



4. Daha Temiz Yazım: typedef ve using​


Fonksiyon göstericilerinin sözdizimi karmaşık görünebilir. Bunu basitleştirmek için takma adlar kullanırız:

C++:
// Eski usul (C tarzı)
typedef int (*MatematikselIslem)(int, int);

// Modern C++ usulü
using IslemPtr = int(*)(int, int);

IslemPtr islem = Carp;



Sonuç​


Function Pointers, C++'ın esnekliğini ve gücünü temsil eder. Kodunuzun sadece veriler üzerinde değil, davranışlar üzerinde de dinamik kararlar vermesini sağlar. Modern C++'ta (C++11 sonrası) bu yapıların üzerine inşa edilen std::function ve Lambda ifadeleri işleri daha da kolaylaştırsa da, temel mantığı anlamak için göstericileri bilmek şarttır.
 
Geri
Üst