C++ - Çok biçimlilik (Nesne yönelimli programlama 4)

Selamlar.

Bu yazıda sizlere polymorphism (çok biçimlilik) zımbırtısını anlatmaya karar verdim. Özellikle GUI kütüphanelerinde polymorphism çok işe yaramaktadır. Gelin, ne işe yaradığına bakalım.

[CODE lang="cpp" title="Örnek kodumuz"]#include <iostream>

#define PI 3.1415

class Sekil{

public:

virtual float alan() = 0;

virtual float cevre() = 0;

};

class Dikdortgen : public Sekil{

float uzun_kenar, kisa_kenar;

public:

Dikdortgen(float uzun_kenar, float kisa_kenar){

this->uzun_kenar = uzun_kenar;

this->kisa_kenar = kisa_kenar; //this->kisa_kenar = private'taki kisa_kenar değişkenidir.

}

float alan(){

return uzun_kenar*kisa_kenar;

}

float cevre(){

return 2*(uzun_kenar+kisa_kenar);

}

};
class Cember : public Sekil{
private:
float yaricap;
public:
Cember(float yaricap){
this->yaricap = yaricap;
}
float alan(){
return PI*yaricap*yaricap;
}
float cevre(){
return 2*PI*yaricap;
}
};
int main(){
Sekil *sekiller[2];
sekiller[0] = new Cember(5.0);
sekiller[1] = new Dikdortgen(12,6);

for(int i = 0; i < 2; i++){
std::cout<<"Sekil alani : "<<sekiller->alan()<<"\nCevresi : "<<sekiller->cevre()<<"\n";
delete sekiller;
}
return 0;
}[/CODE]

Özellikle main() fonksiyonuna dikkatinizi çekmek istiyorum. main() fonksiyonumuzda, her şekil sınıfını ayrı ayrı yazmak yerine, sadece şekillerin ortak özelliğini kullanmak istedik ve "Sekil" sınıfının bir dizisini yaptık. Ortak özellikler olan alan ve çevre fonksiyonlarımıza erişmiş olduk.

GUI programlamada da, her GUI komponenti aslında birer penceredir. Bastığımız butondan tutun, yazı yazdığınız "metin kutusu" (textbox) bile aslında bir penceredir. Bazen pencere pointer'ı kullanan bir fonksiyona bu komponentlerden birisini parametre olarak geçebilirsiniz, bu sayede sadece pencere sınıfından kalıtılan bilgi ve fonksiyonlar kadar bir bilgiye sahip olursunuz.

[CODE lang="cpp" title="Örnek kod 2 (bu kod derlenemez)"]//...
class ProgressBar : public Window{
ProgressBar(int x, int y) : Window(int x, int y){}
//...
};
void bir_seyler_yap(Window& pencere){/*...*/}

//...

int main(){
ProgressBar progressbar1(100,20);
bir_seyler_yap(progressbar1);
//...
}[/CODE]

Evet, çok biçimlilik bu kadar basit! Farklı iki sınıfın aynı üst sınıfa bağlı olduğunu biliyor ve sadece o üst sınıfın özelliklerini kullanmak istiyorsanız, çok biçimliliğe başvurmalısınız.

Yorumlar


Blog girdisi detayları

Ekleyen
TerabyteForever
Okuma süresi
2 dakika okuma
Görüntüleme
820
Yorumlar
2
Son güncelleme

Yazılım kategorisindeki diğer girdiler

TerabyteForever adlı kullanıcının diğer girdileri

Bu girdiyi paylaş

Geri
Yukarı