28 Aralık 2012 Cuma

TEMPLATE


Template yapısını şu şekilde anlatayım..

 Yandaki ilk fonksiyonumuz iki integer tipindeki değeri toplayıp yine integer tipinde bir değer döndürür.
ikinci fonksiyonumuz da iki double değer vardır ve fonksiyonun dönüş tipide doubledır.






Verilen iki fonksiyonla aynı işlemi yaptık ama ver tiplerimiz ve dönüş tipimiz faklıydı.Bu aslında function overloading  yapmaktır.Yani aynı işlevi gören bir fonksiyonu farklı parametreler için tekrar yazmaktır.
Her veri tipi için ayrı ayrı fonksiyon yazmak yerine gelin bunu tek fonksiyona indirgeyelim ve bunun için de tabiki template yapısını kullanalım.

Yanda görüldüğü gibi template yapısını kullandım.Function template yapısı için fonksiyonun başına template<typename T> yazmak gereklidir.typename yerine class da yazılabilir.veri tipi olarakta T tipini yazdım.



class template,function template ve farklı sayıda veri tipi içeren template fonksiyon örnek uygulamaları aşağıdaki programdadır.

İşte program...


#include<iostream>
using namespace std;
template<typename T>  // class template için classın en başına bu tanımlama yapılmak zorundadır
class Pair
{
T first;
T second;
public:
Pair(T a,T b)
{
first =a;
second =b;
}
void setFirst(T a)
{
firt=a;
}
void setSecond(T a)
{
second=a;
}
T getFirst()const
{
return first;
}
T getSecond()const
{
return second;
}

};


template<typename T>           //function tamplate için bu tanımlama yapılmalıdır.
T addUp(const Pair<T> &thePair)
{

return thePair.getFirst()+thePair.getSecond(); //dönen değer T tipinde olacaktır.
}

template<typename T,typename K>         //birden fazla veri tipi vardır.
T addUp(T a,K b)
{
return a+b;           //dönüş değeri fonksiyonun aldığı ilk parametreyle aynıdır.
}

int main()
{
Pair<int> a(2,7);                  // <int> nesneye ait verilerin int tipinde olduğu belirtilmiştir.
Pair<double> b(2.2,7.2);      // <double> nesneye ait verilerin double tipinde olduğu belirtilmiştir.


cout<<"first number : "<<a.getFirst()<<endl;
cout<<"second number: "<<a.getSecond()<<endl;
cout<<"sum is  "<<addUp(a)<<endl;
cout<<"----------------------"<<endl;
cout<<"first number  "<<b.getFirst()<<endl;
cout<<"second number "<<b.getSecond()<<endl;
cout<<"sum  is "<<addUp(b)<<endl;
cout<<"----------------------"<<endl;
cout<<"call the addUp(2.3,5) : "<< addUp(2.3,5)<<endl;
cout<<"call the addUp(4,5.2) : "<< addUp(4,5.6)<<endl;
        system("pause");
return 0;
}


Program çıktısı...







Hiç yorum yok:

Yorum Gönder