İkili Operatörlerden +'nın Aşırı Yüklenmesi

İkili operatörlerden +'nın aşırı yüklenmesini bir örnek üzerinde incelemeye çalışacağız ama mutlaka kendiniz yazmaya çalışın.

İkili operatörlerden +'nın aşırı yüklenmesini bir örnek üzerinde incelemeye çalışacağız ama mutlaka kendiniz yazmaya çalışın.

Şimdi bu örneğimizde ikili operatörlerden +'nın aşırı yüklenmesini bir örnekle anlamaya çalışacağız. Örneğimizde bozuk paralarla kağıt paralarınızın olduğunu ve bunların toplamı hesaplamaya çalışacağız.

C++ diline göre kağıt paraları int alırken bozuk paraları float alacağız. Normalde bunları direk toplama şansımız yoktur, ancak biz operatör aşırı yüklemesini kullanarak bunu yapmaya çalışacağız. Şu noktayı gözden kaçırmayalım: Şöyle bir sistem düşünün: Her bozuk paranız 10'a ulaştığı zaman, diyelim ki hep 1 YTL'lere sahipsiniz, bunlar tümlenip direk 1 tane kağıt para olarak hesabınıza geçiyor.


#include <iostream>

#include <string>

#include <stdio.h>

using namespace std;



class paralarim

{

    private:

   int kagit;

   float bozuk;



   public:

   paralarim():kagit(0),bozuk(0.0)

   {}

   paralarim(int kgt,float bzk):kagit(kgt),bozuk(bzk)

   {}

   goster()

   {

       cout<<kagit<<" kadar kagit paran var"<<endl;

     cout<<bozuk<<" kadar bozuk paran var"<<endl;



   }



     paralarim paralarim::operator +(paralarim p1)

 {

     int k=kagit+p1.kagit;

     float b= bozuk+p1.bozuk;

     if (b>10)

     {k+1; b=b-10;}

     return paralarim(k,b);

   }





    void sor()

    {

        cout<<"kac tane kagit paran var :"; cin>>kagit;

      cout<<"kac tane bozuk paran var :"; cin>>bozuk;



    }



};



int main()

{

  paralarim obj,obj1(5,5.0),obj2;

  int a=1;

  cout<<"paralarinizi hesaplamak istiyormusunuz? yes için 1 No için 0 girin" ;

  cin>>a;

  switch(a!=0)

  {

          obj.sor();





      obj.goster();

    obj2 = obj1+obj;

     obj2.goster();

  }





    getchar();getchar();

   return 0;

}





Örnekte dikkat etmenizi istediğim nokta 

paralarim():kagit(0),bozuk(0.0)

   {}

   paralarim(int kgt,float bzk):kagit(kgt),bozuk(bzk)

   {}

İşte bu kısım neden 2 kez Constructor tanımlandı ..

Çünkü burada 



     paralarim paralarim::operator +(paralarim p1)

 {

     int k=kagit+p1.kagit;

     float b= bozuk+p1.bozuk;

     if (b>10)

     {k+1; b=b-10;}

     return paralarim(k,b);

   }




Bu kısım return paralarim (k,b); diye bir paralarim cinsinde bir nesne döndürüyor. Eğer siz 2. constructor'u silerseniz program hata vericektir; çünkü boşta kalan bir return type oluyor.

Mutlaka 2. constructoru silip yani:


paralarim(int kgt,float bzk):kagit(kgt),bozuk(bzk)

   {}



Bu kısmı programdan silip alacağınız hatayı bir okuyun...

Umarım faydalı bir örnek olmuştur...
  • Etiketler;
Emre Çamalan
1986 doğumlu olan Emre Çamalan, Atılım Üniversitesi Bilgisayar Mühendisligi 2. sınıfta burslu olarak eğitimini sürdürüyor. Programlama merakı ve tecrübesi okuldan öncelere dayananan yazar, Ankara'da yaşıyor.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

mükemmel
güzel paylaşım eline sağlık

Yukarı Git