Mühazirə14: C++-da varislik və virtual funksiyalar


Virtual funksiyaların istifadəsi



Yüklə 0,59 Mb.
səhifə7/9
tarix19.06.2022
ölçüsü0,59 Mb.
#61805
növüMühazirə
1   2   3   4   5   6   7   8   9
Varislik.Virtual funk.

14.6. Virtual funksiyaların istifadəsi
Aşağıdakı proqramda virtual funksiyaların istifadə olunması nümunəsi verilmişdir:
#include
using namespace std;
class base
{
public:
void fun_1() { cout << "base-1\n"; }
virtual void fun_2() { cout << "base-2\n"; }
virtual void fun_3() { cout << "base-3\n"; }
virtual void fun_4() { cout << "base-4\n"; }
};
class derived : public base
{
public:
void fun_1() { cout << "derived-1\n"; }
void fun_2() { cout << "derived-2\n"; }
void fun_4(int x) { cout << "derived-4\n"; }
};
int main()
{
base *p;
derived obj1;
p = &obj1;
p->fun_1(); //virtual funksiya deyil
p->fun_2();//varisdəki virtual çağırılacaq
p->fun_3();//bazadakı virtual çağırılacaq
p->fun_4();//bazadakı virtual çağırılacaq
p->fun_4(5); //virtual funksiya deyil. p ilə istifadə oluna bilməz
}

Yuxarıda proqramda erkən və gec bağlanma adlanan (Late and Early Binding) konsepsiya nümayiş olunur.
fun_1() funksiyasının baza sinifdəki versiyası çağırılır. Çunki, o virtual funksiya deyil və p göstəricisi base tipli olduğuna görə bazadakı funksiya çağırılır;
fun_2() funksiyası varis sinifdə (derived) yenidən yazılmış (overridden) versiyası çağırılır. Çünki o virtual funksiyadır;
fun_3() funksiyası varis sinifdə yenidən yazılmadığına (non overridden) görə baza sinifdəki virtual funksiya çağırılır;
fun_4(int) funksiyasının varis sinifdəki prototipi baza sinifindəkindən (bazadakı parametrsizdir) fərqləndiyindən o, varis sinifin özəl funksiyasıdır və baza tipli göstərici ilə istifadə oluna bilməz. Bu səbəbdən fun_4() funksiyası varis sinifdə yenidən yazılmadığına (non overridden) görə baza sinifdəki virtual funksiya çağırılır;
Virtual funksiyaların istifadəsinə aşağıdkı qaydalar nəzərə alınmalıdır:
1.Virtual funksiyalar public sahədə elan olunmalıdırlar.
2.Virtual funksiyalar static və ya başqa sinifin friend funksiyası ola bilməzlər.
3. Proqramın işi zamanı polimorfizm əldə etmək üçün - baza sinif tipindən olan göstərici ilə virtual funksiyaları istifadə (müdaxilə) etmək lazımdır.
4.Baza və Varis siniflərdə virtual funksiyanın prototipi eyni olmalıdır ki, yenidən təyin olunma (overriding) mumkun olsun.
5.Virtual funksiyalar həmişə baza sinifdə təyin olunurlar və varis sinifdə yenidən təyin olunurlar (fərqli kodla).
6.Virtual funksiya varis sinifdə yenidən təyin olunmaya da bilər. Bu halda baza sinifdəki versiya istifadə olunacaq.
7. Sinifin virtual destruktoru ola bilər, amma virtual konstruktoru ola bilməz.

Yüklə 0,59 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin