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];
}
}
#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.
Hiç yorum yok:
Yorum Gönder