C++ Operatörleri aşırı yüklemek

C++‘da bazı operatöleri ezerek, istediğimiz amaca hizmet etmesini sağlayabiliriz. Örnek vermemiz gerekirse; a+b işleminde “+” işaretini “-“ yapmasını söyleyebiliriz. Böylece programda her hangi bir yerde toplama yapılması gerekirse, program otomatik olarak çıkarma işlemi gerçekleştirecektir. Aşağıda +, – , ++, — operatörlerini değiştirdik. Yeni bir görev eklemek yerine varolan görevlerini biz yazdık. Kodu incelediğinizde anlayacaksınızdır.
#include “stdafx.h” //VisualStudio için gerekli
#include //cout ve cin için gerekli
#include //getch() fonksiyonu için gerekli
using namespace std;

class aYukle
{
private:
int x,y,z;
public:
aYukle() //Öncellikle bir sorun çıkmaması için ilk değerleri atıyoruz.
{
x=0;
y=0;
z=0;
}


aYukle (int a,int b,int c) //İşlemlerde kullanacağımız ilk nesnenin verilerini tutucaz.
{
x=a;
y=b;
z=c;
}
void GetObje(int &a,int &b,int &c)
{
//Burada gelen adreslere direk değerleri yazdırıyoruz.
a=x;
b=y;
c=z;

}

aYukle operator + (aYukle gelenObje); //Ezeceğimiz + işaretinin prototipini belirliyoruz.
aYukle operator – (aYukle gelenObje);
aYukle operator ++ ();
aYukle operator –();
};

aYukle aYukle::operator +(aYukle gelenObje)
{
aYukle tut; // Tut diye bir nesne yaratıp, x,y,z değerlerine atanmasını sağlıyoruz.
tut.x=x+gelenObje.x;
tut.y=y+gelenObje.y;
tut.z=z+gelenObje.z;
return tut;
}

aYukle aYukle::operator -(aYukle gelenObje)
{
aYukle tut;
tut.x=x-gelenObje.x;
tut.y=y-gelenObje.y;
tut.z=z-gelenObje.z;
return tut;
}

aYukle aYukle::operator ++()
{
x++;
y++;
z++;
return *this;
}

aYukle aYukle::operator –()
{
x–;
y–;
z–;
return *this;
}

int _tmain(int argc, _TCHAR* argv[])
{

int al1,al2,al3;
aYukle o1(5,6,7),o2(1,2,3),o3; //Nesnelerimizi yaratıyoruz. Önce o1 nesnesi oluşturulur. Ardından o2 nesnesi x y z de değerlerini korur.

o3=o2+o1;
o3.GetObje (al1,al2,al3); //x y z private alanda olduğu için fonksiyonumuz aracılığı ile alıyoruz.
cout << “x: ” << al1 << ” y: ” << al2 << ” z: ” << al3 << “n”;

o3=o1-o2;
o3.GetObje (al1,al2,al3);
cout << “x: ” << al1 << ” y: ” << al2 << ” z: ” << al3 <<“n”;

++o2;
o2.GetObje (al1,al2,al3);
cout << “x: ” << al1 << ” y: ” << al2 << ” z: ” << al3 <<“n”;

–o1;
o1.GetObje (al1,al2,al3);
cout << “x: ” << al1 << ” y: ” << al2 << ” z: ” << al3 <<“n”;

getch();

return 0;
}

/*
25.05.2010
Kaynak:ilhanbahar.Com
*/

Benzer Yazılar

Yorumlar

  • muharrem , 27 Mayıs 2010 - 20:01

    bukadar basit değil işte kolay olsaydı şimdiye kadar neleri yapılırdı

    Cevapla
  • ilhan bahar , 31 Mayıs 2010 - 00:34

    Zor diye vazgeçmemek lazım 🙂

    Cevapla
  • ugur , 01 Ocak 2011 - 15:12

    teşekkürler kod için öncelikle …Anlamadıgım şey şu mesela küçüktür operatörünü (<)
    aşırı yüklerken oluşturdugumuz class'ın içinde fonksiyonu int olarak tanımlıyoruz neden böle yapılıyor neden degişkenlik gösteriyor bunu açıklayabilirmisiniz?

    Cevapla
  • ilhan bahar , 04 Ocak 2011 - 03:15

    Değişken tipi sizin değişkenlerinize göre değişir. Her hangi başka bir tipte olabilir.

    Cevapla
  • Cem Demir , 28 Mart 2011 - 15:44

    Bilgiler için teşekkür ettim,

    #include “stdafx.h” //VisualStudio için gerekli
    #include //cout ve cin için gerekli
    #include //getch() fonksiyonu için gerekli

    Burada hata olmuş. Sanırım kodu, yazı editörünün html kısmına yazdığınız için sorun çıkartmış.

    Cevapla
  • ilhan bahar , 28 Mart 2011 - 18:55

    Evet Cem, oralarda editör hatası oluşmuş, yanlış hatırlamıyorsam bir giriş için iostream olması gerekiyordu. Getch için ise Google’a bakmak lazım 🙂

    Cevapla
  • Cem Demir , 29 Mart 2011 - 11:53

    Getch için de yazılıyor.

    Cevapla

Yorum Yazın

Cevabı iptal etmek için tıklayın.

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla