Eşittir Operatörü

onurcan1977
27-02-2018, 09:51   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
7 mesaj
Kayıt Tarihi:Kayıt: Şub 2012

Merhaba, C++'a yeni başladım. Daha önce AS3, C#, Visual Basic, HTML gibi diller kullandım.

C++ hakkında yabancı dil bir makaleyi takip ediyorum ve şu cümlede takıldım:

Assignment Operator ( = )
Operates '=' is used for assignment, it takes the right-hand side
(called rvalue) and copy it into the left-hand side (called lvalue).
Assignment operator is the only operator which can be overloaded but
cannot be inherited.

Burada "can be overloaded but cannot be inherited" ne anlama geliyor? Overload bildiğim kadarıyla fonksiyonda hem bir hem de birden fazla parametrenin tanımlanabilmesi. Inheritance ise nesne yönelimli programlamada kalıtım yani sınıf ve alt sınıflar.

Son Düzenleme: onurcan1977 ~ 27 Şubat 2018 09:52 Neden: Konu adını değiştirdim
errorno
03-03-2018, 16:40   |  #2  
Taze Üye
Teşekkür Sayısı: 1
16 mesaj
Kayıt Tarihi:Kayıt: Ara 2017

Merhaba,

"cannot be inherited", miras yoluyla devralınamaz. Miras işlemlerine kullanamazsınız.
"can be overloaded" ise, aşırı yükleme (overload) yapabilirsiniz anlamına geliyor. İnternet üzerinde
bununla ilgili birçok örnek bulabilirsiniz.

Saygılarımla

errorno bu faydalı yanıtı için aşağıdaki 1 kişiden teşekkür aldı... [ Göster ]
onurcan1977
29-03-2018, 19:08   |  #3  
OP Taze Üye
Teşekkür Sayısı: 0
7 mesaj
Kayıt Tarihi:Kayıt: Şub 2012

Merhaba geç yanıt verdiğim için üzgünüm. Örnek vermek gerekli sanırım ben vereyim. Bildiğim diğer dillere göre yazıyorum. Doğru mu anlamışım (bu örneği verirken kendim de somutlaştırıyorum)

// Overload mümkün
textbox.Text = String("Test metni", String(number));

// Miras mümkün değil
Text = "Test metni";
return Text;

onurcan1977
30-03-2018, 20:32   |  #4  
OP Taze Üye
Teşekkür Sayısı: 0
7 mesaj
Kayıt Tarihi:Kayıt: Şub 2012

Okuduğum makalede bununla ilgili bir sayfa var ama halen tam olarak anlayamadım.

Tutorial about operator overloading in C++

errorno
01-04-2018, 16:07   |  #5  
Taze Üye
Teşekkür Sayısı: 1
16 mesaj
Kayıt Tarihi:Kayıt: Ara 2017

Merhaba,

çok dikkat etmeniz gereken bir yerde ölümcül bir hata yapıyorsunuz. İlk olarak aşağıda daha önce yazmış olduğunuz kodlarda herhangi bir miras işlemi bulunmamaktadır. Burada sadece basit bir atama işlemi bulunmaktadır.

// Miras mümkün değil
Text = "Test metni";
return Text;


Genel olarak söylemek gerekirse C++ programlama dilinde bir fonksiyonun aşırı yüklenmesi ile kastedilen;

- fonksiyon isminin tekrar kullanılabileceği,
- parametre tiplerinin değişebileceği,
- parametre sayılarının değişebileceği

gibi genel kuralları vardır. Ancak basit gibi gözüken bu konun arkasında çok önemli konularda bulunmaktadır. Mesela bir fonksiyon prototipi bile tanımlarken aşırı yüklenme konusu sizi yanıltabilir.

Aşağıdaki örnekleri inceleyin;

int test1(int * i);
int test1(int i);
int test1(int* i);
int test1(int &i);
int test1(int *i);

bunu yazdığımda benim derleyicim (Visual Studio 2013 Pro) bana sadece 3 adet aşırı yüklenmiş fonksiyon bildirimi yapmaktadır. Aslında gözüken farklıdır ve kullanım yerlerine göre hepsine ihtiyacınız olabilir. Size anlatmak istediğim şu; lütfen üzerinde durulması gereken konuları sadece özetini okuyarak atlayıp geçmeyiniz. Bir iki örnek ile konuyu kapatmayınız. C++ içerisinde detaylar çok önemlidir. Ve hatta yazdığınız kodlar sizce önemsiz olan sadece bir veya iki detay yüzünden üzerinde günlerce uğraşmak
zorunda kalırsınız veya bir firmada çalışıyorsanız başınızı ağrıtabilirsiniz bu yüzden.

Diğer yandan miras konusu zaten başlı başına üzerinde düşünülmesi ve çok iyi anlaşılması gereken ayrı bir bölümdür. Yine önceki yorumunuzda yazdığınız şu aşağıdaki kodlarda miras ile ilgili birşey göremiyorum. Bu konuyu burada açıklamak hem uzun ve hem de size bütün bilgileri buradan veremeyeceğim için yanıltıcı olmasını istemem. Dolayısıyla Türkçe kaynaklardan takip ediniz veya ingilizceniz yeterli ise yabancı kaynakların başlangıç seviyesinden uzman seviyesine doğru takip ediniz.

// Miras mümkün değil
Text = "Test metni";
return Text;

Eğer imkanınız var ise Türkçe güncel C/C++ kitabı alarak destek alın. Bunun size çok faydası olacaktır. Zamanla ilerleyecek ve kitap dışına çıkmak zorunda kalacaksınız ve sonunda kitaplarda bulunmayan bilgiler ile uğraşmış olacaksınız. Eğer konuları anlayarak geçip bitirirseniz.

Saygılarımla