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