Ana sayfa > Programlama > C++ Programlama > İşlemci çoklu görev (Overloading)

İşlemci çoklu görev (Overloading)

► Detaylı anlatım

C++'da, işlemci çoklu görev tanımlama işlemi yapılırken de çok biçimlilik özelliği kullanılır. Bir işlemci için çoklu görev tanımlama işlemi yapıldığında, işlemci, sahip olduğu özelliklerin yanı sıra, bir sınıfa bağlı olarak ek işlem yapma özelliği kazanır.

Bir işlemci için çoklu görev tanımlama işlemi yapıldığında yani birden fazla işlem yapma kapasitesi kazandırıldığında, işlemcinin orjinal fonksiyonu ortadan kalkmaz.

İşlemcilere çoklu görev tanımlama işlemi yapmak için işlemci fonksiyonları oluşturulur. Bir işlemci fonksiyonu, çoklu görev tanımlama uygulanan işlemcinin bağlı olduğu sınıfa göre gerçekleştireceği işlemleri tanımlar.

İşlemci fonksiyonu operator anahtar kelimesi kullanılarak oluşturulur. İşlemci fonksiyonları, bir sınıfın üyesi olabilir veya olmayabilir. Üye olmayan işlemci fonksiyonları, sınıf için friend fonksiyon olarak tanımlanır. İşlemci fonksiyonlarının yapısı sınıf üyesi olma ve olmama durumuna göre farklılık gösterir.

Sınıf üyesi olarak tanımlanan işlemci fonksiyonunun genel yapısı aşağıda gösterilmektedir:

veri-türü sınıf-adı::operatorişlemci(parametreler)
{
  // Kod bloğu
}

İşlemci fonksiyonları herhangi bir geçerli veri türü döndürebilmesine rağmen, genellikle ilgili oldukları sınıf cinsinden bir nesne geri döndürür. Çoklu görev tanımlama işlemi yapılacak olan işlemci operator anahtar kelimesinin hemen sağında yer alan "işlemci" ifadesinin yerine konacaktır.

Çoklu görev tanımlama işlemini, tek değere işlem yapan bir işlemciye uygularsak, parametre listesi boş olacak, iki değere işlem yapan bir işlemciye uygularsak, parametre listesinde tek bir parametre yer alacaktır.

Şimdi, + işlemcisine üye fonksiyon ile çoklu görev tanımlama işlemi uygulamasını bir örnek üzerinde incelemeye çalışalım:


#include <iostream>

using namespace std;

class sinif {
  private:
    int id;
  public:
	// Çoklu görev tanımlama işlemi uygulanmış constructor fonksiyonları
	sinif();        // Parametresiz constructor fonksiyonu
	sinif(int pid); // Parametreli constructor fonksiyonu

	void deger_goster(void);
	
	// Sınıf üyesi olarak tanımlanmış + işlemcisi fonksiyonu 
	sinif operator+(sinif nes);
};

// Çoklu görev tanımlama işlemi uygulanmış constructor fonksiyonları ana yapısı
sinif::sinif()
{
  id = 0;
  cout << "İlk değer ataması yapmadan nesne oluşturma!" << endl;
}

sinif::sinif(int pid)
{
  id = pid;
  cout << "İlk değer ataması ile nesne oluşturma: " << id << endl;
}

// Sınıf üyesi olarak tanımlanmış + işlemcisi fonksiyonu 
sinif sinif::operator+(sinif nes)
{
  sinif lnes;
  // id değişken değeri işlemcinin sol tarafında yer alan
  // nesneye ait olup this işaretçisi ile erişim sağlanır.
  lnes.id = nes.id + id;

  return lnes;
}

void sinif::deger_goster(void)
{
  cout << "id değişken değeri: " << id << endl;
}

int main(void)
{
  sinif nes01(21);             // Parametreli constructor fonksiyonu ile nesne oluşturma
  sinif nes02(17);             // Parametreli constructor fonksiyonu ile nesne oluşturma
  
  sinif nes03 = nes01 + nes02; // Çoklu görev tanımlama işlemi uygulanmış + işlemcisinin kullanımı

  nes01.deger_goster();
  nes02.deger_goster();
  nes03.deger_goster();

  return 0;
}

Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:

İlk değer ataması ile nesne oluşturma: 21
İlk değer ataması ile nesne oluşturma: 17
İlk değer ataması yapmadan nesne oluşturma!
id değişken değeri: 21
id değişken değeri: 17
id değişken değeri: 38

Program, parametre atayarak nes01 ve nes02 adlı iki adet nesne oluşturur. Üçüncü nesne olan nes03 nesnesini oluştururken değer atamak yerine çoklu görev tanımlama işlemi işlem uygulanmış + işlemcisinin fonksiyonunu kullanarak ilk iki nesnenin id değişken değerlerini toplayarak nes03 nesnesinin id değişkenine atar. Bütün nesneler yoluyla id değişken değerlerini ekrana yazar.

Burada, + işlemcisi sol tarafında yer alan nes01 nesnesi işlemci fonksiyonuna this işaretçisi yoluyla, nes02 nesnesi ise parametre olarak geçirilir. Fonksiyonun sonunda sinif cinsinden bir nesne geri döndürülür.