Forum: Diğer Konular RSS
C++'da operator+ Fonksiyonu ve Erişim ile İlgili Bir Soru
İbrahim #1
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: C++'da operator+ Fonksiyonu ve Erişim ile İlgili Bir Soru
Merhaba Arkadaşlar;

C++'da şöyle bir kod yazdım:
class Counter
{
private:
  int count;
public:
  Counter() : count(0)
  {
  }
 
  explicit Counter(int count) : count(count)
  {
  }
 
  Counter(const Counter& count) : count(count.count)
  {
  }
 
  Counter operator +(int c) const
  {
    return Counter(count + c);
  }
 
  Counter operator +(Counter c) const
  {
    return Counter(count + c.count);
  }
 
  /* BURADA CONST YÜZÜNDEN HATA VERİYOR! */
  int operator +(int c) const
  {
    return count + c;
  }
 
  void show() const
  {
    cout << count << endl;
  }
};

Burada int operator +() const fonksiyonunda const olmadığında uygulama çalışıyor fakat bu şekilde const konulunca hata veriyor. Neden bu şekilde const koyunca hata veriyor? Sonuçta sınıfın herhangi bir verisini değiştirmiyoruz.

Bir de mesela Counter sınıfında şöyle bir üye fonksiyon var:
void Counter::show(Counter c) const
{
  cout << c.count << endl; // -> Burada c.count şeklinde c nesnesinin sınıfında private olarak
                                       // belirlenen count verisine nasıl erişiliyor?
}

Teşekkürler!
Bu mesaj İbrahim tarafından değiştirildi; zaman: 2015-12-15, 10:43.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
İbrahim:
Neden bu şekilde const koyunca hata veriyor?

Çünkü bu sınıfta zaten başka bir operator+(int) const tanımlı. (Dönüş türlerinin farklı olması önemsizdir çünkü dönüş türü işlevin kimliğinin parçası değildir.)

void Counter::show(Counter c) const
{
  cout << c.count << endl; // -> Burada c.count şeklinde c nesnesinin sınıfında private olarak
                                       // belirlenen count verisine nasıl erişiliyor?
}

Sınıf doğal olarak kendi private üyelerine erişebilir. (Yoksa hemen hemen hiçbir işlem tanımlayamazdık.) Counter::show, Counter'ın üye işlevi olduğuna göre count üyesine erişebilir.

Ali
İbrahim #3
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Çünkü bu sınıfta zaten başka bir operator+(int) const tanımlı. (Dönüş türlerinin farklı olması önemsizdir çünkü dönüş türü işlevin kimliğinin parçası değildir.)

Peki bunu nasıl yapabiliriz? Hem şu işi int operator +(int c) hem de şu işi Counter operator +(int c).
Yani şu şekilde kullanmak nasıl mümkün olur?
Counter c0(7), c1(c0 + c0);
int i = c0 + 5;
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Counter'dan int'e dönüştüren işlece ihtiyacın var (derlemedim):
class Counter
{
// ...
    operator int() const
    {
        return count;
    }
};
Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 22:48:54 (UTC -08:00)