C Gömülü Programlama konularımız yayında...
Çok biçimlilik sözlük anlamı olarak birden fazla şekilde varlık gösterebilen nesne ya da kavramları ifade etmektedir. Fonksiyonlar açısından çok biçimlilik aynı isme sahip bir fonksiyonun çok amaçlı kullanılması için, farklı sayıda ve veri türündeki parametrelerle tanımlanması olarak ifade edilebilir.
C++'da, fonksiyonlarda çoklu görev tanımlama işlemi yapılırken çok biçimlilik özelliği kullanılır. Birden fazla fonksiyon, farklı veri türündeki ve/veya farklı sayıda parametrelerle bildirimleri yapıldığında, aynı adı kullanır ve program içinden farklı parametreler ve aynı ad ile çağrılırlarsa, fonksiyon çoklu görev tanımlama işlemi gerçekleştirilmiş olur. Böylece, program içinde tek bir isim kullanarak birden fazla fonksiyona erişim sağlanabilir.
Burada kullanılan çoklu görev tanımlama ifadesi birden fazla fonksiyonun aynı isim ile çağrılarak kullanılacağını gösterir.
Böyle bir fonksiyon çağırıldığında, çağrı fonksiyon çağrısında kullanılan parametre sayısı ve tiplerine uygun olarak ilgili fonksiyona yönlendirilir. Bu özelliği bir örnek üzerinde incelemeye çalışalım:
#include <iostream>
using namespace std;
// topla() fonksiyonunun 2 farklı veri türünde parametre ile bildirimi yapılarak çoklu görev tanımlama işlemi
int topla (int id1, int id2);
float topla (float fd1, float fd2);
int main(void)
{
// 2 adet int değer parametre ile fonksiyon çağrısı
cout << "int değer toplamları: "<< topla (7, 8) << endl;
// 2 adet float değer parametre ile fonksiyon çağrısı
cout << "float değer toplamları: " << topla (21.8f, 17.5f) << endl;
return 0;
}
// Fonksiyon ana yapı bildirimleri
int topla(int id1, int id2)
{
return id1 + id2;
}
float topla(float fd1, float fd2)
{
return fd1 + fd2;
}
Yukarıdaki programı derleyip çalıştırdığınız zaman aşağıdaki ifadeleri ekrana yazar:
int değer toplamları: 15 float değer toplamları: 39.3
Program çalışmaya başladığında, 2 kez topla() fonksiyonunu çağırır. İlk çağrıda 2 adet int değer ikinci çağrıda ise 2 adet float değer kullanılarak topla() fonksiyonu çalıştırılır.
C++ derleyicisi, fonksiyon çağrısında kullanılan parametre sayısı, sırası ve veri türlerine göre hangi fonksiyonun kullanılacağına karar verir.
Çok biçimliliğin sağladığı olanakla yapılan fonksiyon çoklu görev tanımlama işlemi ile; sadece tek bir fonksiyon adı ile farklı veri türündeki parametrelerle aynı işlem yapılarak daha esnek programlar yazılabilmektedir.
Fonksiyon çoklu görev tanımlama işleminin gerçekleşmesi için; aynı ada sahip fonksiyon bildirimlerinde yer alan parametrelerin türü ve/veya sayısı farklı olmalıdır. Ancak, fonksiyonların geri döndürdüğü değer aynı veya farklı olabilir.
Şimdi, aynı özelliği farklı bir örnek üzerinde incelemeye çalışalım:
#include <iostream>
using namespace std;
void deger_goster(int id) {
cout << "int değişken değeri: " << id << endl;
}
void deger_goster(float fd) {
cout << "float değişken değeri: " << fd << endl;
}
void deger_goster(char const *cp) {
cout << "Karakter dizisi değeri: " << cp << endl;
}
int main(void) {
deger_goster(21);
deger_goster(145.82f);
deger_goster("Fonksiyon çoklu görev tanımlama işlemi");
return 0;
}
Yukarıdaki programı derleyip çalıştırdığınız zaman aşağıdaki ifadeleri ekrana yazar:
int değişken değeri: 21 float değişken değeri: 145.82 Karakter dizisi değeri: Fonksiyon çoklu görev tanımlama işlemi
Program deger_goster() fonksiyonunu, her defasında farklı bir veri türü kullanarak, 3 defa çağırır. Program fonksiyona geçirilen parametrenin veri türüne göre aynı isme sahip 3 fonksiyondan ilgili fonksiyonu çağırarak işlem yapar.
Şimdi, farklı sayıda parametreye sahip fonksiyon çoklu görev tanımlama işlemini bir örnek üzerinde incelemeye çalışalım:
#include <iostream>
using namespace std;
void carpim(int id1, int id2) {
cout << "Çarpım sonucu: " << id1 * id2 << endl;
}
void carpim(int id1, int id2, int id3) {
cout << "Çarpım sonucu: " << id1 * id2 * id3 << endl;
}
int main(void) {
carpim(21, 5);
carpim(17, 4, 8);
return 0;
}
Yukarıdaki programı derleyip çalıştırdığınız zaman aşağıdaki ifadeleri ekrana yazar:
Çarpım sonucu: 105 Çarpım sonucu: 544
Program carpim() fonksiyonunu, her defasında farklı sayıda parametre kullanarak, 2 defa çağırır. Program fonksiyona geçirilen parametrenin sayısına göre aynı isme sahip 2 fonksiyondan ilgili fonksiyonu çağırarak işlem yapar.
Fonksiyon çoklu görev tanımlama işlemini normal fonksiyonlara uyguladığımız gibi, sınıflar içinde yer alan üye fonksiyonlara uyglayabiliriz. Bu özelliği bir örnek üzerinde incelemeye çalışalım:
#include <iostream>
using namespace std;
class sinif {
private:
int priid;
int prifd;
public:
sinif() { priid=0; prifd=0.00f; };
// Çoklu görev tanımlama işlemi uygulanmış fonksiyonlar
void topla(int id1, int id2) { priid = id1+id2; };
void topla(float fd1, float fd2) { priid = fd1+fd2; };
void topla(int id1, int id2, int id3) { priid = id1+id2+id3; };
void deger_goster()
{
cout << "priid değişken değeri: " << priid << "\n";
cout << "prifd değişken değeri: " << prifd << "\n";
};
};
int main(void)
{
sinif nes; // Nesne oluşturma
nes.topla(21, 35);
nes.deger_goster();
nes.topla(21, 35, 58);
nes.deger_goster();
nes.topla(17.35F, 45.54F);
nes.deger_goster();
return 0;
}
Yukarıdaki programı derleyip çalıştırdığınız zaman aşağıdaki ifadeleri ekrana yazar:
priid değişken değeri: 56 prifd değişken değeri: 0 priid değişken değeri: 114 prifd değişken değeri: 0 priid değişken değeri: 62 prifd değişken değeri: 0
Program, priid adlı int ve prifd adlı float veri türündne olmak üzere iki adet değişken, değişkenlere ilk değer vermede kullanılan bir constructor fonksiyonu, ilki iki adet int parametre, ikincisi iki adet float parametre ve üçüncüsü üç adet int parametre alan üç adet toplama işlemi yapan topla() adlı fonksiyon ve sınıf içindeki değişken değerlerini ekranda gösteren deger_goster() adlı bir fonksiyon içeren bir sınıf bildirimi yapar. sinif türünden oluşturduğu nes adlı nesne yoluyla, topla() fonksiyonunu farklı parametrelerle çağırır ve sonuçları ekana yazar.