ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
KBUZEM
Karabük Üniversitesi
Uzaktan Eğitim Araştırma ve Uygulama Merkezi
9. HAFTA
NESNEYE DAYALI PROGRAMLAMA
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
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
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
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
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
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
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
BLM225
Nesneye Dayalı Programlama
9
Dortgen <int,float>D2;
D1.DegerVer(3.5,4.5);
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
9
BLM225
Nesneye Dayalı Programlama
9
Dortgen <int,float>D2;
D1.DegerVer(3.5,4.5);
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
9

More Related Content

9. ÅŸablonlar

  • 1. KBUZEM Karabük Ãœniversitesi Uzaktan EÄŸitim AraÅŸtırma ve Uygulama Merkezi 9. HAFTA NESNEYE DAYALI PROGRAMLAMA
  • 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
  • 9. BLM225 Nesneye Dayalı Programlama 9 Dortgen <int,float>D2; D1.DegerVer(3.5,4.5); 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 9
  • 10. BLM225 Nesneye Dayalı Programlama 9 Dortgen <int,float>D2; D1.DegerVer(3.5,4.5); 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 9