Referans fonksiyonları, bir değişkene doğrudan erişim sağlayarak o değişkenin değerini değiştirmemize olanak tanır. Bu, özellikle büyük veri yapılarıyla çalışırken veya bir fonksiyonun birden fazla değeri değiştirmesi gerektiğinde oldukça kullanışlıdır. İşte referans fonksiyonlarının bazı örnekleri:
Bu örnekte, bir sayının değerini referans yoluyla değiştiren basit bir fonksiyon göreceğiz.
void degistir(int &x) {
x = x * 2;
}
int sayi = 5;
degistir(sayi); // sayi'nin değeri artık 10
& işareti, x'in sayi değişkenine referans olduğunu belirtir. Bu nedenle, degistir fonksiyonu içindeki değişiklikler doğrudan sayi değişkenini etkiler.Referanslar, dizileri değiştirmek için de kullanılabilir. Aşağıdaki örnek, bir dizinin elemanlarını ikiye katlar:
void diziDegistir(int &dizi[], int boyut) {
for (int i = 0; i < boyut; i++) {
dizi[i] = dizi[i] * 2;
}
}
int sayilar[] = {1, 2, 3, 4, 5};
int boyut = sizeof(sayilar) / sizeof(sayilar[0]);
diziDegistir(sayilar, boyut); // sayilar dizisinin elemanları artık {2, 4, 6, 8, 10}
İki değişkenin değerini takas etmek, referans fonksiyonlarının klasik bir kullanım örneğidir.
void takas(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int x = 10, y = 20;
takas(x, y); // x'in değeri artık 20, y'nin değeri artık 10
a ve b değişkenleri referans olarak geçirildiği için, fonksiyon içindeki takas işlemi orijinal değişkenlerin değerlerini değiştirir.Referanslar, karmaşık veri yapılarını (struct) değiştirmek için de kullanılabilir.
struct Ogrenci {
string ad;
int yas;
};
void yasArttir(Ogrenci &ogr) {
ogr.yas++;
}
Ogrenci ogr1 = {"Ayşe", 20};
yasArttir(ogr1); // ogr1.yas artık 21
ogr değişkeni referans olarak geçirildiği için, yasArttir fonksiyonu içindeki değişiklikler doğrudan ogr1 yapısını etkiler.Referans fonksiyonları, C++'da verimliliği ve okunabilirliği artırmanın güçlü bir yoludur. Ancak, referansların dikkatli kullanılması önemlidir, çünkü beklenmedik değişikliklere yol açabilirler.