C++ ile +(artı) Operatörünü Pointer İle Aşırı Yükleme Örneğimiz


09.04.2012-20:51 Tarihinde Eklendi.
www.seyfettinkahveci.com Derecelendirme: 10 / 10 Oy Sayısı: 16005710Toplam Puan: 63600 / Yorum Sayısı: 412005710 adet.


tarih.h:

#ifndef TARIH_H
#define TARIH_H

#include <iostream>//kütüphane sayfaya dahil ediliyor

using namespace std;//isim uzayı tanımlanıyor

class tarih//tarih adında bir sınıf oluşturuluyor
{
    public://herkesin kullanabileceği blok
        tarih(int sa,int da, int san);//constructor (parametre alan)
        virtual ~tarih();//destructor
        tarih* operator +(tarih *gelen);//artı işaretine aşırı yüklen fonksiyon yazılıyor
        void ekranayaz();/fonksiyonla veriler ekrana yazılıyor
    private://sadece bu sınıfın üyeleri olanların erişebileceği blok
        int saat;//değişken tanımlanıyor
        int dakika;//değişken tanımlanıyor
        int saniye;//değişken tanımlanıyor
};

#endif // TARIH_H

tarih.cpp:

#include "tarih.h"//header sayfaya çağırılıyor

tarih::tarih(int sa,int da, int san)
{
  saat=sa;//constructor a gelen veriler privatedaki değişkenlere aktarılıyor
  dakika=da;//constructor a gelen veriler privatedaki değişkenlere aktarılıyor
  saniye=san;//constructor a gelen veriler privatedaki değişkenlere aktarılıyor
}

tarih::~tarih()
{
//destructor
}
tarih* tarih::operator +(tarih *gelen){//artı işaretine aşırı yüklenen fonksiyonumuzu yazıyoruz. geri dönen değerin tarih sınıfından bir pointer olduğunu göstermek için tarih* dedik
    tarih *gecici=new tarih(0,0,0);//gecici adında ilk değerleri 0 0 0 olan bir sınıf oluşturuluyor
    gecici->saat=saat+gelen->saat;//gecicinin saati gelenin saatiyle ve fonksiyonu çağıran değişkenin saatiyle toplanıyor
    gecici->dakika=dakika+gecici->dakika;//gecicinin dakikası gelenin dakikasıyla ve fonksiyonu çağıran değişkenin dakikasıyla toplanıyor

    gecici->saniye=saniye+gelen->saniye;//gecicinin saniyesi gelenin saniyesiyle ve fonksiyonu çağıran değişkenin saniyesiyle toplanıyor
    if(gecici->saniye>59){//gecicinin son durumdaki saniyesi 59dan büyükse
    int elde,kalan;//değişken tanımlanıyor
    elde=gecici->saniye/60;//dakikaya kaç ekleneceği bulunuyor
    kalan=gecici->dakika%60;//saniyenin ne olacağı belirleniyor
    gecici->dakika+=elde;//gecicinin dakikası elde değişkeniyle toplanıp gecicinin dakikasına eşitleniyor
    gecici->saniye=kalan;//gecicinin saniyesine kalan değer aktarılıyor
    }
    if(gecici->dakika>59){//gecicinin son durumdaki dakikası 59dan büyükse
    int elde,kalan;//değişken tanımlanıyor
    elde=gecici->dakika/60;//saate kaç ekleneceği bulunuyor
    kalan=gecici->dakika%60;//dakikanın ne olacağı belirleniyor
    gecici->dakika=kalan;//gecicinin dakikasına kalan değer aktarılıyor
    gecici->saat+=elde;//gecicinin saati elde değişkeniyle toplanıp gecicinin saatine eşitleniyor
    }

return gecici;//tarih sınıfını temsil eden gecici nesnesi çeğırıldığı yere geri gönderiliyor
}
 void tarih::ekranayaz(){//verileri ekrana yazan fonksiyonumuzu yazıyoruz
 cout<<"saat: "<<saat<<" dakika: "<<dakika<<" saniye: "<<saniye<<endl;//veriler ekrana yazılıyor

 }

main.cpp:

#include "tarih.h"//header sayfaya çağırılıyor
int main()
{
    tarih *t1,*t2,*t3;//tarih sınıfını temsil edecek yeni pointer tipinde değişkenler tanımlanıyor *t1 olması t1in pointer olduğunun göstergesidir.
    t1=new tarih(20,12,58);//t1 değişkenine ilk değerler atanıp dinamik yapı oluşturuluyor
    t2=new tarih(14,10,12);//t2 değişkenine ilk değerler atanıp dinamik yapı oluşturuluyor
    t3=(*t2)+t1;//t2 değişkeni aşırı yükleyen fonksiyonu çağırıyor ve değerler gönderiliyor return ile geri dönen veri t3 e aktarılıyor
    t3->ekranayaz();//t3 değişkeninin verileri ekrana yazılıyor.
    return 0;//program bitiriliyor
}


Kod Hakkında Anlamadığınız Bir Kısım Olursa Yorum Ekleye Yazın En Kısa Sürede Cevaplamaya Çalışırım.

Seyfettin KAHVECİ
Balıkesir Üniversitesi
NEF-BOTE



Yazının tamamının kopyalanması yasaktır. En baştaki birkaç paragrafı kopyalayıp, yazıya link verebilirsiniz. Aksi durumda uyarılmaksızın yasal yollara gidilecektir.

Uzun süredir yorumlara cevap veremediğim için sistem yeni yorumlara kapatılmıştır. Anlayışınız için teşekkürler.
Yorumlar
Bu makale için henüz hiç yorum yapılmamış.