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.