Üstteki resimden yola çıkacak olursak Animal sınıfı Base class , Wolf, OtherAnimal ve Fish sınıfları da
bu Base class tan türetilmiş sınıflar GoldFish de Fish den türetilmiş.Tüm türetilmiş sınıfların ortak özelliği
"yemek" üzerine düşünün.Animal sınıfı eat() fonksiyon içeriyor,diğer sınıflar da öyle, yalnız türetilmiş sınıfları
pointer arrayına attığımızda Animal *Ptr[3]; ve bu arrayın elemanlarının eat() fonksiyonunu Ptr[0]->eat(); komutuyla her cagırısımızda beklediğimiz şey her nesnenin kendi özelliğini ekrana yazması ama bu çağırım
Base class daki eat() fonksiyonunu çağırmaktan başka bişey değildir.Amacımıza uygun çıktı için Base class'da
eat() fonksiyonunun başına virtual anahtar kelimesini getirmeliyiz.Kodları buradan indirip üstünde oynamalar yapabilirsiniz,öğrenmeniz için daha iyi olacaktır.Aynı zaman da aşşağıda da inceleyebilirsiniz. Kolay gelsin..
/*
Cüneyt Çarıkçi 27-04-2012
cuno_carikci@windowslive.com
*/
#include
using namespace std;
class Animal {
public:
virtual void eat() {
cout<<"??!!..!!??\n";
}
/* Saf sanal sınıf icin
bir alt satır aktiflestirilmeli
virtual void eat()=0;*/
~Animal() {}//unutulmamalı
};
class Wolf : public Animal {
public:
void eat() {
cout << "Kurt: Ceylan yer!\n";
}
};
class Fish : public Animal
{
public:
void eat() {
cout << "Balik: Balik yer!\n";
}
};
class GoldFish : public Fish {
public:
void eat() {
cout << "Akvaryum Baligi: Balik yemi yer!\n";
}
};
class OtherAnimal : public Animal {
};
int main() {
Wolf w;
Fish f;
GoldFish g;
Animal *Ptr[3];
Ptr[0]=&w;
Ptr[1]=&f;
Ptr[2]=&g;
cout<<" ------HAYVANLARIN BESLENME SEKILLARI------\n";
for ( int i = 0; i < 3; i++ ){
Ptr[i]->eat();
/*
Base class da eat() fonksiyonunu
virtual (sanal) yapmasaydık
her cagirilista Base class'taki
eat() cagirilacaktı ki bu da istedigimiz
bir şey degil.Ortak bir payda altında
Her nesne kendine ozgu
özellikler barındırabilir ve bizim
bunlara ulaşmamız gerekebilir.
*/
}
system("PAUSE");
}