C++ Referanslar

Başlatan 0u2h4n, 15 Ağustos 2012 - 16:32:04

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

0u2h4n

Aşağıda 3 fonksiyon tanımı yaptım ve bu parametrelerden kendi anladığımı açıkladım. Doğru anlayıp anlamadığımı merak ediyorum :D


  • double grade(const vector<double>& hw) : gelen vektörün orjinalini fonksiyonda kullanmak üzere alır ve üzerinde değişiklik yapamaz.
  • double grade(vector<double>& hw)           : gelen vektörün orjinalini fonksiyonda kullanmak üzere alır alır ve üzerinde değişiklik yapabilir.
  • double grade(vector<double> hw)              : gelen vektörün kopyasını alır dolayısıyla üzerinde değişiklik yapamaz. Fakat fonksiyon içinde yeni vektör ile değişiklik yapılabilir.

Erdem

Alıntı yapılan: 0u2h4n - 15 Ağustos 2012 - 16:32:04

  • double grade(const vector<double>& hw) : gelen vektörün orjinalini fonksiyonda kullanmak üzere alır ve üzerinde değişiklik yapamaz.

Evet doğru!

Referans bir nesne için takma isimdir.  Bir işleve parametre olarak nesnenin kendisini göndermek ile referans göndermek arasında bazı farklar vardır.

Nesnenin kendisini parametre olarak gönderdiğimizde işlev içinde bu gönderdiğimiz nesnenin yerel bir kopyası oluşturulur.  Tüm değişiklikler bu yerel kopya üzerinde olacağı ve işlevin kapsam parantezlerinden çıktıktan sonra bu yerel kopyanın yaşamı sona ereceği için dolayısıyla bu değişiklikler bizim asıl türümüzü etkilemeyecektir. Ayrıca bu yöntem nesnenin yerel bir kopyasını oluşturduğu için pahalı bir yöntemdir. Bu yüzden özellikle kullanıcı tanımlı türlerle kullanırken bu performansı yavaşlatacaktır.

İkinci yöntem ise parametre olarak referans göndermek. Bu durumda nesnenin yerel bir kopyası oluşturmuyor. Ve referans aslında nesnenin kendisi yani takma ismi.

Alıntı yapılan: 0u2h4n - 15 Ağustos 2012 - 16:32:04
  • double grade(vector<double>& hw)           : gelen vektörün orjinalini fonksiyonda kullanmak üzere alır alır ve üzerinde değişiklik yapabilir.

Bu da doğru çünkü referans vektörün kendisi için bir takma isimdir.

Alıntı yapılan: 0u2h4n - 15 Ağustos 2012 - 16:32:04
  • double grade(vector<double> hw)              : gelen vektörün kopyasını alır dolayısıyla üzerinde değişiklik yapamaz. Fakat fonksiyon içinde yeni vektör ile değişiklik yapılabilir.

Haklısın burada yapılan değişiklikler de nesnenin yerel kopyası üzerinde olur. Ve işlevden çıkıldığı zaman bu değişiklikler kaybolur.

sem

Açıklamalarınız doğru. Yapılabilecek işlemler aynı söylediğiniz gibi...

Fakat 1. fonksiyonun parametresindeki konu referanslar ile alakalı bir durum değil. Belirleyiciler ile alakalı bir durum. const olarak tanımladığınız referans üzerinde de, gösterici üzerinde de ve nesnenin kendisi üzerinde de  değişiklik yapamazsınız.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

0u2h4n