Temel C++ 6. Gün: Sanal Fonksiyonlar

Sanal Fonksiyonlar

Sanal fonksiyonlar, miras alınan sınıfın bir fonksiyonunu miras alan sınıfta farklı bir şekilde kullanmamıza yarayan fonksiyonlardır. Fonksiyon tanımlarken başına virtual eklemek yeterlidir. Örnek;

Dünkü örneğimizin geliştirilmiş hali:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>

using namespace std;

class Hayvan{
private:
int agirlik;
string isim;
public:
void agirligiBelirle(int kg)
{
agirlik = kg;
}
void ismiBelirle(string ismi)
{
isim = ismi;
}
int agirligiGetir()
{
return agirlik;
}
string ismiGetir()
{
return isim;
}
//yeni sanal fonksiyonumuz
virtual string sesiGetir()
{
return "Henuz bir sesim yok.";
}
Hayvan();
~Hayvan();
};

Hayvan::Hayvan()
{
cout << "Bir hayvan nesnesi olusturuldu." << endl;
}

Hayvan::~Hayvan()
{
cout << this->isim << " nesnesi yok edildi." << endl;
}

class Kedi : public Hayvan
{
private:
public:
// ana sinifin sahip oldugu sesiGetir fonksiyonunu farkli sekilde kullanabiliyoruz.
string sesiGetir()
{
return "miyav";
}
Kedi();
~Kedi();
};

Kedi::Kedi(){}
Kedi::~Kedi(){}

// kopek sinifimiz.
class Kopek : public Hayvan
{
private:
public:
// ana sinifin sahip oldugu sesiGetir fonksiyonunu farkli sekilde kullanabiliyoruz.
string sesiGetir()
{
return "havhav";
}
Kopek();
~Kopek();
};

Kopek::Kopek(){}
Kopek::~Kopek(){}

int main()
{
Kedi Tekir;

Tekir.ismiBelirle("Tekir");
Tekir.agirligiBelirle(5);

cout << Tekir.ismiGetir() << " isimli ";
cout << Tekir.agirligiGetir() << " agirligindaki ";

cout << "nesnemiz " << Tekir.sesiGetir() << " sesini cikarir." << endl;

//aynı aileden diğer nesnemiz.
Kopek Tomar;

Tomar.ismiBelirle("Tomar");
Tomar.agirligiBelirle(10);

cout << Tomar.ismiGetir() << " isimli ";
cout << Tomar.agirligiGetir() << " agirligindaki ";

cout << "nesnemiz " << Tomar.sesiGetir() << " sesini cikarir." << endl;
return 0;
}

Sanal fonksiyonlar daha çok pointer aracılığıyla kullanılır fakat ben mantığını oldukça basit tutmaya çalıştım.

Sonraki Bölüm: Çokbiçimlilik:
Temel C++ - 7. Gün: Çokbiçimlilik