16 Ekim 2019 Çarşamba

+ Operatörünün Amacı - Programlama


Bu yazı C++ bilgisini geliştirenler içindir.

Elbette + operatörü 2 sayıyı toplamak için kullanılır. C++ 'da başka amaçları da vardır. Örneğin metinleri birbirlerine eklemek için kullanılabilir. MetinBas + MetinSon şeklinde kullanılır. Ama bununla da sınırlı değildir. Aslında C++ 'da + operatörüne hoş ve pratik bir görev verilmiştir. Yazılımcı operatöre istediği fonksiyonu yükleyebilir

Bir kargo şirketi düşünelim. Bu şirket bir araca yüklenecek paketlerin boylarını, hacimlerini, ağırlıklarını bilmelidir. Buna göre ayarlama yapacaktır. Hatta bazen bir paketi iptal edip diğer araca yüklemesi gerekebilir. Girilen paket bilgilerini tutan ve paketlerin toplam ağırlık ve hacimlerini hesaplayan örnek kod şöyledir.


#include <iostream>
#include <vector>

using namespace std;

class Paket
{
    public:

    long Genislik;
    long Uzunluk;
    long Yukseklik;
    long Hacim;
    long Agirlik;

    Paket operator+(const Paket& SagEleman)
    {
        //Sag taraftaki elemanin degiskenleriyle toplaniyor.
        Paket Sonuc;
        Sonuc.Hacim=Hacim+SagEleman.Hacim;
        Sonuc.Agirlik=Agirlik+SagEleman.Agirlik;
        return Sonuc;
    }
    Paket operator-(const Paket& SagEleman)
    {
        Paket Sonuc;
        Sonuc.Hacim=Hacim-SagEleman.Hacim;
        Sonuc.Agirlik=Agirlik-SagEleman.Agirlik;
        return Sonuc;
    }

};

vector<Paket> Kutu;
Paket TumKutu;

bool ElemanGir(long egGenislik,long egUzunluk, long egYukseklik, long egAgirlik)
{
    Paket yEleman;

    yEleman.Genislik=egGenislik;
    yEleman.Uzunluk=egUzunluk;
    yEleman.Yukseklik=egYukseklik;
    yEleman.Agirlik=egAgirlik;

    //Hacim hesaplaniyor.
    yEleman.Hacim=yEleman.Genislik*yEleman.Uzunluk*yEleman.Yukseklik;

    try
    {
        Kutu.push_back(yEleman);
        return true;
        /*Gerci 3-5 sayidan olusan bir dizi günümüzdeki bilgisayarlarin bellegini
        dolduramaz ama try bloku icin iyi bir ornek.*/
    }
    catch(bad_alloc&)
    {
        return false;
    }
}

void ElemanIptal(int eiNumara)
{
    TumKutu=TumKutu-Kutu[eiNumara];
    Kutu.erase(Kutu.begin()+eiNumara);
}

void ElemanlariTopla()
{
    int Sira;
    int ESayisi;

    ESayisi=Kutu.size();
    TumKutu.Hacim=0;
    TumKutu.Agirlik=0;

    for (Sira=0;Sira<ESayisi;Sira++)
    {
        TumKutu=TumKutu+Kutu[Sira];
    }
}



Burada + operatörüne 2 işlem yükleniyor. Paketlerin hem ağırlığını hem hacmini topluyor. Ama asıl kullanışlılık şöyle ortaya çıkacaktır. Varsayalım bir nesnede 10 değişken tutuluyor olsun. Ve bunların diğer nesnelerin değişkenleriyle toplanması gerekiyor olsun. Sürekli her birini ayrı ayrı toplamak yerine + operatörüne hepsinin toplanması fonksiyon olarak yüklenebilir. Böylece Nesne1 + Nesne2 yazarak bütün değişkenler kolayca toplanabilir. Hatta bu fonksiyon içine başka işlemler de yazılabilir. Böylece + operatörü -ya da diğer operatörler- yazılım için oldukça pratik fonksiyonlara dönüşebilir.