Thread overview
C++'da operator+ Fonksiyonu ve Erişim ile İlgili Bir Soru
Dec 15, 2015
İbrahim
Dec 15, 2015
İbrahim
December 15, 2015

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 gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 15, 2015

Alıntı:

>

Çü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;

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 15, 2015

Alıntı (İ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.)

Alıntı:

>
> 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

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
December 15, 2015

Counter'dan int'e dönüştüren işlece ihtiyacın var (derlemedim):

class Counter
{
// ...
   operator int() const
   {
       return count;
   }
};

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]