Menu
Coddy logo textTech

Referans ile Geçme

Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 41 / 56.

Fonksiyonlara argüman geçirdiğinizde, C++ normalde değerlerin kopyalarını oluşturur. Bu, fonksiyon içindeki değişikliklerin orijinal değişkenleri etkilemediği anlamına gelir. Referans ile geçme (Pass by reference), fonksiyonların doğrudan orijinal değişkenlerle çalışmasına izin vererek bu davranışı değiştirir.

Referans ile geçirmek için, fonksiyon bildiriminizde parametre türünden sonra & sembolünü ekleyin:

void doubleValue(int& number) {
    number = number * 2;  // Orijinal değişkeni değiştirir
}

Bu fonksiyonu çağırdığınızda, fonksiyon içindeki parametre üzerinde yapılan herhangi bir değişiklik, içeri aktarılan orijinal değişkeni doğrudan değiştirecektir. Bu, bir fonksiyonun kendi argümanlarını değiştirmesini istediğinizde veya kopyalamanın verimsiz olacağı büyük nesnelerle çalışırken özellikle yararlıdır.

Referans ile geçme (pass by reference), veri kopyalama yükünü ortadan kaldırarak programlarınızı, özellikle vektörler veya map'ler gibi karmaşık veri yapılarıyla çalışırken daha hızlı ve bellek açısından daha verimli hale getirir.

challenge icon

Görev

Kolay

Değişkenleri doğrudan fonksiyon parametreleri aracılığıyla değiştirerek referansla aktarımı (pass by reference) gösteren bir fonksiyon oluşturun. Bu zorluk, & sembolünün fonksiyonların kopyalar yerine orijinal değişkenlerle çalışmasına nasıl izin verdiğine dair anlayışınızı test edecektir.

Aşağıdaki girdiler sağlanacaktır:

  • Birinci sayıyı temsil eden bir tam sayı value1
  • İkinci sayıyı temsil eden bir tam sayı value2
  • Üçüncü sayıyı temsil eden bir tam sayı value3

Programınız şunları yapmalıdır:

  1. Referans yoluyla üç tam sayı parametresi alan tripleValues adında bir fonksiyon oluşturun
  2. Fonksiyonun içinde, her bir parametreyi 3 ile çarpın
  3. Ana fonksiyonda (main function), üç giriş değerini okuyun ve bunları değişkenlerde saklayın
  4. Fonksiyonu çağırmadan önce orijinal değerleri yazdırın
  5. Üç değişkenle birlikte tripleValues fonksiyonunu çağırın
  6. Değiştirildiklerini göstermek için fonksiyon çağrısından sonra değiştirilmiş değerleri yazdırın

Aşağıdaki tam çıktı formatını kullanın:

Fonksiyon çağrısından önce:

Original values: [value1] [value2] [value3]

Fonksiyon çağrısından sonra:

Tripled values: [new_value1] [new_value2] [new_value3]

Fonksiyon imzası, referansla aktarımı belirtmek için her parametre türünden sonra & sembolünü kullanmalıdır: void tripleValues(int& a, int& b, int& c). Bu, fonksiyonun kendisine aktarılan orijinal değişkenleri doğrudan değiştirmesine olanak tanıyarak, değerle aktarım (pass by value) ile referansla aktarım arasındaki temel farkı gösterir. Main içindeki değişkenler, fonksiyon çağrısından sonra kalıcı olarak değişecek ve fonksiyonun kopyalar yerine orijinal bellek konumlarıyla çalıştığını kanıtlayacaktır.

Kopya kağıdı

C++'da referans ile geçmek (pass by reference) için, fonksiyon bildiriminizdeki parametre türünden sonra & sembolünü ekleyin:

void doubleValue(int& number) {
    number = number * 2;  // Orijinal değişkeni değiştirir
}

Referans ile geçme, fonksiyonların kopyalar yerine doğrudan orijinal değişkenlerle çalışmasına olanak tanır. Fonksiyon içindeki parametrelerde yapılan değişiklikler, içeri aktarılan orijinal değişkenleri değiştirecektir.

Bu, veri kopyalama yükünü ortadan kaldırarak, özellikle vektörler veya haritalar (maps) gibi karmaşık veri yapılarıyla çalışırken programları daha hızlı ve bellek açısından daha verimli hale getirir.

Kendin dene

#include <iostream>
using namespace std;

// TODO: tripleValues fonksiyonunu burada oluşturun

int main() {
    // Giriş değerlerini oku
    int value1, value2, value3;
    cin >> value1 >> value2 >> value3;
    
    // Orijinal değerleri yazdır
    cout << "Original values: " << value1 << " " << value2 << " " << value3 << endl;
    
    // TODO: tripleValues fonksiyonunu burada çağırın
    
    // Değiştirilmiş değerleri yazdır
    cout << "Tripled values: " << value1 << " " << value2 << " " << value3 << endl;
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler