2. BLM225
Nesneye Dayalı Programlama
2
9. Åžablonlar (Templates)
Şablonlar yazılımları tekrar kullanabilmenin bir yöntemidir. Bu sayede tek bir kod yazarak
farklı tiplerde değer alan fonksiyonlar sınıflar tanımlayabiliriz. Gövdeleri aynı olan
fonksiyonları şablon olarak tanımlayabiliriz. Şablon kullanmanın iki önemli avantajı vardır.
1. Program kodunu kısaltır. Birden fazla fonksiyon yazacağımıza tek bir fonksiyon
yazarız.
2. Hata düzeltmeyi kolaylaştırır. Eğer kod yazarken hata yapılmışsa tek bir yede
düzeltmek yeterli olacaktır.
Aşağıda verilen programda GetMax fonksiyonu aşırı yüklenmiştir. Bu fonksiyon ilkinde int
türünden sayıları parametre olarak olmakta ve büyüğünü geri döndürmektedir. İkincisinde ise
float türünden sayıları parametre olarak almaktadır. Kod kısmı ise aynıdır.
#include <iostream>
#include <conio.h>
using namespace std;
int GetMax (int a, int b) {
int result;
result = (a>b)? a : b;
return (result);
}
float GetMax (float a, float b) {
float result;
result = (a>b)? a*3 : b+10;
return (result);
}
int main ()
{
int i=5, j=6;
float l=10.6, m=5.1;
cout << GetMax(i,j)<< endl;
cout << GetMax(l,m)<< endl;
return 0;
}
Yukarda verilen iki fonksiyon yerine tek bir fonksiyon yazılabilir. Bunun için Fonksiyon
şablon olarak tanımlanmalıdır. Aşağıda bunun örneği görülmektedir.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
2
3. BLM225
Nesneye Dayalı Programlama
3
template <class T>
T GetMax (T a, T b) {
Yukarda verilen satırda a ve b int, float veya başka bir türden olabilir. Ne verilirse ona göre
program derlenerek çalıştırılacaktır. Örneğin aşağıdaki satırda i ve j değişkenleri <int> ifadesi
ile tamsayı olacağı belirtilmiştir.
k=GetMax<int>(i,j);
Eğer i ve j değişkenleri int i,j; şeklinde önceden int türünden oldukları belirtilmişse <int>
ifadesini koymaya gerek yoktur. Bu taktirde
int i,j;
k=GetMax(i,j);
Şeklinde de çağrılabilir.
Aşağıda verilen örnekleri inceleyiniz.
//------------------------------
#include <iostream>
#include <conio.h>
using namespace std;
template <class S>
S GetMax (S a, S b) {
S result;
result = (a>b)? a : b;
return (result);
}
int main ()
{
int i=5, j=6, k;
float l=10.6, m=5.7, n;
char x='p' , y='r', c;
cout <<GetMax<int>(i,j)<< endl;
cout <<GetMax<float>(l,m)<< endl;
cout<<GetMax<char>(x,y)<<endl;
getch();
return 0;
}
//----------------------------------------------
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
3
4. BLM225
Nesneye Dayalı Programlama
4
#include <iostream>
#include <conio.h>
using namespace std;
template <class T, class U>
T Alan (T a, U b) {
return a*b;
}
int main ()
{
double y=1.5;
int x=3;
cout << Alan(y,x)<< endl;
cout << Alan(x,y)<< endl;
getch();
return 0;
}
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
4
5. BLM225
Nesneye Dayalı Programlama
5
//--------------------------------------
#include <iostream>
using namespace std;
template <class T>
T GetMax (T a, T b) {
T result;
result = (a>b)? a : b;
return (result);
}
int main ()
{
int i=5, j=6, k;
float l=10.6, m=5.7, n;
k=GetMax(i,j);
n=GetMax(l,m);
cout << k << endl;
cout << n << endl;
return 0;
}
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
5
6. BLM225
Nesneye Dayalı Programlama
6
Sınıflarda template kullanımı. Aşağıda verilen örneği inceleyiniz.
#include <iostream>
#include <conio.h>
using namespace std;
template <class T>
class Dortgen {
T x, y;
public:
void Dortgen<T>::DegerVer(T a, T b)
{
x = a;
y = b;
}
T Dortgen<T>::Alan (void)
{
return x*y;
}
};
int main ()
{
Dortgen <int>D1 ;
Dortgen <float>D2;
D1.DegerVer(3,4);
D2.DegerVer(2.5,2.5);
cout << "Alan1:" << D1.Alan()<<'n';
cout << "Alan2: " << D2.Alan()<<endl;
getch();
return 0;
}
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
6
7. BLM225
Nesneye Dayalı Programlama
7
#include <iostream>
#include <conio.h>
using namespace std;
template <class T, class U>
class Dortgen {
T x;
U y;
public:
void DegerVer(T,U);
U Alan (void);
};
template <class T, class U>
void Dortgen<T,U>::DegerVer(T a, U b) {
x = a;
y = b;
}
template <class T, class U>
U Dortgen<T,U>::Alan (void) {
return x*y;
}
int main ()
{
Dortgen <int,float>D1;
Dortgen <int,float>D2;
D1.DegerVer(4,3.1);
D2.DegerVer(7.4,2.5);
cout << "Alan1: " << D1.Alan()<<'n';
cout << "Alan2: " << D2.Alan()<<endl;
return 0;
}
#include <iostream>
#include <conio.h>
using namespace std;
template <class T, class U>
class Dortgen {
T x;
U y;
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
7
8. BLM225
Nesneye Dayalı Programlama
8
public:
void Dortgen<T,U>::DegerVer(T a, U b)
{ x = a; y = b; }
U Dortgen<T,U>::Alan (void) { return
x*y; }
};
int main ()
{
Dortgen <float,int>d1;
Dortgen <int,float>d2;
d1.DegerVer(4.5,3.6);
d2.DegerVer(4.5,3.6);
cout << "Alan1: " << d1.Alan()<<'n';
cout << "Alan2: " << d2.Alan()<<endl;
return 0;
}
#include <iostream>
#include <conio.h>
using namespace std;
template <class T,class U>
class Dortgen {
T x;
U y;
public:
void Dortgen<T,U>::DegerVer(T a, U b)
{
x = a;
y = b;
}
T Dortgen<T,U>::Alan (void)
{
return x*y;
}
};
int main ()
{
Dortgen <float,int>D1 ;
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
8