İ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;
Yorum Yaz

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

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

Yukarı Git