12 Ağustos 2016 Cuma

C++ Operator Overloading

C++'ta basit veri tipleri için tanımlanmış ve bu veri tipleri arasında işlemler yapmamızı sağlayan fonksiyonlara operatör denir.Örneğin; iki integer değerini toplayıp, çıkarmak gibi. Fakat kullanıcı tanımlı veri tiplerinde(örneğin Class) operatör işlemleri için "operator overloading" yapmamız gerek yani bir Class'a ait nesnelerin aralarında operatör işlemlerine sokulması için operatörün class içerisinde tanımlanması gerek. İşte bu olaya "Operator Overloading" denilmektedir.

Peki bu olayı bir Class içerisinde inceleyelim.


Tanımlamamızı yaparken bir fonksiyon gibi önce "return_type" , "operator" , "operator sign" ve arkasından giriş argümanları şeklinde tanımlamalıyız. Sonrasında tıpkı bir fonksiyonda olduğu gibi body kısmını doldurabilirsiniz.

Operator fonksiyon , sınıf üzerinden üretilen nesnede operatör işareti geçtiği zaman işlenmektedir. Ayrıntısını bir örnek üzerinden ele alalım.

/* Simple example to demonstrate the working of operator overloading*/
#include <iostream>
using namespace std;
class temp
{
   private:
      int count;
   public:
       temp():count(5){  }
       void operator ++() { 
        count=count+1; 
       }
       void Display() { cout<<"Count: "<<count; }
};
int main()
{
    temp t;
    ++t;        /* operator function void operator ++() is called */
    t.Display();
    return 0;
}
 Output
Count: 6
Bu örnekte operatör fonksiyon olarak "void operator ++()" kullanılmış.Temp sınıfından bir nesne üretilmiş ve "count" değeri constructor ile "5" atanmış. Sonrasında nesne üzerinden operatör fonksiyon çağırılmış ve nesneye ait olan "count" değeri 1 arttırılmış.