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.
Görev
KolayDeğişkenleri işlev parametreleri aracılığıyla doğrudan değiştirerek başvuru ile geçirmeyi gösteren bir işlev oluştur. Bu görev, & sembolünün işlevlerin kopyalar yerine özgün değişkenlerle çalışmasını nasıl sağladığını anlayıp anlamadığını sınayacak.
Aşağıdaki girdiler sağlanacaktır:
- İlk sayıyı temsil eden bir tamsayı
value1 - İkinci sayıyı temsil eden bir tamsayı
value2 - Üçüncü sayıyı temsil eden bir tamsayı
value3
Programın şunları yapmalıdır:
- Başvuru yoluyla üç tamsayı parametresi alan,
tripleValuesadlı bir işlev oluştur - İşlevin içinde her parametreyi 3 ile çarp
- Ana işlevde üç girdi değerini oku ve bunları değişkenlerde sakla
- İşlevi çağırmadan önce özgün değerleri yazdır
- Üç değişkenle
tripleValuesişlevini çağır - Değiştirildiklerini göstermek için işlev çağrısından sonra değiştirilmiş değerleri yazdır
Aşağıdaki tam çıktı biçimini kullan:
İşlev çağrısından önce:
Original values: [value1] [value2] [value3]İşlev çağrısından sonra:
Tripled values: [new_value1] [new_value2] [new_value3]İşlev imzası, başvuru ile geçirmeyi belirtmek için her parametre türünden sonra & sembolünü kullanmalıdır: void tripleValues(int& a, int& b, int& c). Bu, işlevin kendisine geçirilen özgün değişkenleri doğrudan değiştirmesini sağlar ve değer ile geçirme ile başvuru ile geçirme arasındaki temel farkı gösterir. main içindeki değişkenler, işlev çağrısından sonra kalıcı olarak değişecektir; bu da işlevin kopyalar yerine özgün bellek konumlarıyla çalıştığını kanıtlar.
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;
}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
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği4Map'ler (Anahtar-Değer Çiftleri)
std::map'e GirişBir Map OluşturmaDeğerlere Erişme ve DeğiştirmeAnahtar KontrolüÇiftleri KaldırmaMap Üzerinde YinelemeÖzet - Kelime Frekansı7İleri Seviye Fonksiyonlar
Referans ile GeçmeLambda İfadelerine GirişParametreli LambdalarDönüş Değeri Olan LambdalarÖzyinelemeye GirişÖzyinelemeli FaktöriyelLambda ile Sıralama2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev EklemeKendi başına pratik yap: Online C++ derleyicisi