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



Yüklə 0,59 Mb.
səhifə6/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.

Virtual funksiya-baza sinifdə virtual açar sözü ilə elan olunmuş, həmçinin bir və ya bir neçə varis sinifdə yenidən (fərqli kodlu) təyin olunmuş (ingiliscə -overriding) funksiyadır.
Hər bir törəmə sinif virtual funksiyasıyanın öz versiyasına malik ola bilər. Törəmə siniflərdə virtual funksiyanı (təkrar adlı amma fərqli kodlu) təyin edən zaman əvvəldə virtual açar sözünü artırmağa ehtiyac yoxdur.
Virtual funksiyanı təyin olunmuş sinifə polimorf sinif deyilir. Bu virtual funksiya varis sinifdə yenidən təyin olunubsa bu varis sinifə də polimorf sinif deyilir.
Aşağıdakı proqram kodunada bunlar göstərilmişdir:
#include
using namespace std;
class figure {
protected:
double x, y;
public:
void set_olcu(double i, double j) {
x = i;
y = j;
}
virtual void sahe() {
cout << "Bu sinifde sahe hesablanan funksiya elan olunub, teyin olunmayib";
}
};
class triangle : public figure {
public:
void sahe() {
cout << "Hundurluyu ";
cout << x << ", ve oturacagi " << y;
cout << " olan uchbucaqin sahesi: ";
cout << x * 0.5 * y << ".\n";
}
};
class rectangle : public figure {
public:
void sahe() {
cout << "Olchuleri ";
cout << " x =" << x << " y =" << y;
cout << " olan duzbucaqlinin sahesi: ";
cout << x * y << ".\n";
}
};

int main()


{
figure *p; // baza tipine gosterici duzeldek
triangle t; // varis sinif obyekti elan edek
rectangle r;// varis sinif obyekti elan edek
p = &t;
p->set_olcu(10.0, 5.0);
p->sahe();// baza tipli göstərici ilə varis sinifin funksiyası çağırılır

p = &r;
p->set_olcu(10.0, 5.0);


p->sahe();// baza tipli göstərici ilə varis sinifin funksiyası çağırılır
return 0;
}

Burada sahe() virtual funksiyadır və üç sinifdə təkrar təyin olunub. Burada əsas məqsəd nədir? Əvvəlcə ümumi sinifdə virtual funksiya təyin olunur. Bu funksiya onun varis sinifləri tərəfindən istifadə olunması ilə yanaşı varis siniflər bu funksiyaların özəl (təyin etdikləri) realizasiyalarını da işlədə bilirlər.Beləliklə baza tipli göstərci (p) və virtual funksiya ilə müxtəlif hesablamar aparmaq imkanı əldə etdik.


Əgər baza sinifdə sahə() funksiyası qarşısında virtual açar sözü yazılmasa idi, onda baza sinif tipindən olan və varis obyektin ünvanına malik p göstəricisi ilə həmin baza sinifdəki virtual funksiya istifadə ediləcəkdi. Virtual yazılmış halda isə bu p göstəricisi unvanlanmış olduğu varis sinif obyektinin sahə() funksiyasını istifadə edir. Yuxarıdakı proqramda virtual açar sözünü silib proqramı işlətsək aşağıdakı nəticəni almış olarıq:

Baza sinif törəmə siniflər üçün ümumi interfeys qurur və onlara metodu (üzv-funksiyanın kodunu) dəyişməyə imkanı verir! Virtual funksiyalar baza siniflərə vahid interfeys təyin etməyə və varis siniflərə bundan istifadə imkan yaradır. Bütün bunlar ilkin baxışda çətin başa düşülən əməliyyatlar olsa da əslində mürəkkəb proqramların sadələşdirilməsinə xidmət edir. Yəni proqramçı vahid interfeysi yadda saxlayaraq törəmə siniflərdəki fərqli əməliyyatlari yerinə yetirə bilən funksiyalar yarada və işlədə bilər.
lazım gəldikdə varis sinif obyektindən baza sinifdəki virtual üzv funksiyanı da istifadə etmək olar. Bunun üçün :: görünüş sahə işarəsindən istifadə etmək lazımdır. Proqramda bu hal göstərilmişdir:
#include "stdafx.h"
#include
using namespace std;
class Base
{
public:
virtual void show() { cout<<" In Base \n"; } //Bu fun!
};
class Derived: public Base
{
public:
void show() { cout<<"In Derived \n"; }
};
int main(void)
{
Base *bp = new Derived;
bp->Base::show();
return 0;
}
Yuxarıdakı kodda Base *bp = new Derived; ilə baza sinif tipli bp göstəricisinə varis sinif (Derived) obyektinin ünvanını mənimsədərək obyekt qurulur. Sonra bp ilə bazadakı virtual funksiya bp->Base::show(); istifadə olunur.


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