C++ programlamada fonksiyonlar, kodunuzu modüler hale getirmek, tekrar kullanım sağlamak ve okunabilirliği artırmak için kullanılan temel yapı taşlarından biridir. Fonksiyonlar, belirli bir işlemi gerçekleştiren kod bloklarıdır ve bir kez tanımlandıktan sonra programın farklı bölümlerinde tekrar çağrılabilirler.
1. Fonksiyonların Tanımlanması ve Kullanımı
C++’ta bir fonksiyon üç ana bileşenden oluşur:
- Fonksiyon Bildirimi (Declaration / Prototype)
- Fonksiyon Tanımı (Definition)
- Fonksiyon Çağrımı (Call)
1.1 Fonksiyon Bildirimi (Prototype)
Fonksiyon bildirimi, fonksiyonun ismi, dönüş tipi ve parametrelerini belirtir. Genellikle main()
fonksiyonunun üzerinde veya bir başlık dosyasında (header file) tanımlanır.
Genel Sözdizimi:
Dönüş_Tipi Fonksiyon_Adi(Parametre_Tipi1, Parametre_Tipi2, ...);
Örnek:
int Topla(int, int); // Topla fonksiyonunun bildirimi
1.2 Fonksiyon Tanımı (Definition)
Fonksiyonun asıl işlemi gerçekleştirdiği kod bloğudur.
Örnek:
#include <iostream>
using namespace std;
// Fonksiyon bildirimi
int Topla(int, int);
int main() {
int sonuc = Topla(5, 10);
cout << "Toplam: " << sonuc << endl;
return 0;
}
// Fonksiyon tanımı
int Topla(int a, int b) {
return a + b;
}
Bu kodda, Topla()
fonksiyonu iki sayıyı alıp toplamlarını döndürmektedir.
1.3 Fonksiyon Çağrımı (Call)
Fonksiyon çağrımı, tanımlanan fonksiyonun kullanılmasını sağlar. Yukarıdaki örnekte Topla(5, 10);
çağrımıyla fonksiyon kullanılmıştır.
2. Parametreli ve Parametresiz Fonksiyonlar
2.1 Parametresiz Fonksiyon
Eğer bir fonksiyonun giriş parametreleri yoksa, parantezler boş bırakılır.
#include <iostream>
using namespace std;
void SelamVer() {
cout << "Merhaba, Hoş Geldiniz!" << endl;
}
int main() {
SelamVer(); // Fonksiyon çağrılıyor
return 0;
}
2.2 Varsayılan Parametreli Fonksiyon
Bazı parametrelerin varsayılan değerleri olabilir.
#include <iostream>
using namespace std;
void BilgiYaz(string isim = "Ziyaretçi") {
cout << "Merhaba, " << isim << "!" << endl;
}
int main() {
BilgiYaz(); // Varsayılan parametre kullanılır
BilgiYaz("Ahmet"); // Ahmet parametresi ile çağrılır
return 0;
}
Çıktı:
Merhaba, Ziyaretçi!
Merhaba, Ahmet!
3. Değer ve Referans ile Parametre Geçirme
3.1 Değer ile Parametre Geçirme (Call by Value)
Fonksiyona gönderilen değerlerin bir kopyası oluşturulur ve orijinal değişkenler etkilenmez.
#include <iostream>
using namespace std;
void Degistir(int x) {
x = 100; // x'in değeri değişir, fakat ana değişken etkilenmez
}
int main() {
int sayi = 50;
Degistir(sayi);
cout << "Sayi: " << sayi << endl; // Çıktı: 50
return 0;
}
3.2 Referans ile Parametre Geçirme (Call by Reference)
Fonksiyon, değişkenin bellekteki adresiyle çalışır, yani değişiklikler ana değişkene yansır.
#include <iostream>
using namespace std;
void Degistir(int &x) { // & işareti ile referans geçirme
x = 100;
}
int main() {
int sayi = 50;
Degistir(sayi);
cout << "Sayi: " << sayi << endl; // Çıktı: 100
return 0;
}
4. Geriye Değer Döndürmeyen (void) Fonksiyonlar
Bazı fonksiyonlar değer döndürmez, yalnızca işlemleri gerçekleştirir.
void MesajYaz() {
cout << "Bu bir mesajdır." << endl;
}
5. Aşırı Yükleme (Function Overloading)
Aynı isimli birden fazla fonksiyon tanımlayabilirsiniz, ancak parametreleri farklı olmalıdır.
#include <iostream>
using namespace std;
int Topla(int a, int b) {
return a + b;
}
double Topla(double a, double b) {
return a + b;
}
int main() {
cout << Topla(5, 10) << endl; // int versiyonunu çağırır
cout << Topla(2.5, 3.7) << endl; // double versiyonunu çağırır
return 0;
}
6. Özyinelemeli (Recursive) Fonksiyonlar
Bir fonksiyonun kendisini çağırmasına özyineleme (recursion) denir. Örnek olarak, faktöriyel hesaplamasını ele alalım:
#include <iostream>
using namespace std;
int Faktoriyel(int n) {
if (n <= 1) return 1;
return n * Faktoriyel(n - 1);
}
int main() {
cout << "5! = " << Faktoriyel(5) << endl;
return 0;
}
Bu kod, 5 faktöriyel hesaplayarak 5! = 120 çıktısını üretir.
Sonuç
C++ fonksiyonlar, kodun daha modüler, okunabilir ve tekrar kullanılabilir olmasını sağlar. Parametre geçirme, aşırı yükleme ve özyineleme gibi kavramlar, fonksiyonları daha güçlü hale getirir.