Hoşgeldin Misafir

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

MiRaT

13 Kas 2017
2,077 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
tarih.h

Kod:
#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
        **** 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
};


tarih.cpp

Kod:
#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
}
 **** tarih::ekranayaz(){//verileri ekrana yazan fonksiyonumuzu yazıyoruz
 cout<<"saat: "<<saat<<" dakika: "<<dakika<<" saniye: "<<saniye<<endl;//veriler ekrana yazılıyor
 
 }

main.cpp

Kod:
#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
}