Ushbu dasturga ko’ra, base sinfida vfunc( ) nomli virtual funksiya e’lon qilingan.
Bu yerda ishlatilgan virtual kalit so’zi qolgan voris sinfdagi funksiyalarni ishlashi uchun imkoniyat yaratadi.
derived1 va derived2 voris sinflarda vfunc( ) funksiya uchun virtual kalit so’zini ishlatish shart emas.
Demak, asos sinf ko’rsatkich obyekti (*p) voris sinf a’zolariga ya’ni funksiyalariga murojaat qila oladi, agar ushbu funksiya asos sinfda virtual deb e’lon qilingan bo’lsa
Sinfning virtual atributlari vorisga o’tishi
Asos sinfdan voris olinganda ushbu sinfdagi virtual funksiya ham vorislik xususiyatiga ega bo’ladi.
Bu shuni bildiradiki, asos sinf virtual funksiyasi voris sinf uchun mavjud bo’lgani bilan birga, ushbu voris sinfdan yana voris olingan holda ham ushbu virtuallik xususiyati saqlanib qoladi. Ya’ni ushbu funksiya ikkinchi voris sinf uchun ham overrideqilinadi.
Bu xususiyat bir nechta vorislikda ham saqlanib qoladi.
Quyidagi misolda ko’ramiz:
Misol
class base {
public:
virtual void vfunc() {
cout << "This is base's vfunc().\n";
}
};
class derived1 : public base {
public:
void vfunc() {
cout << "This is derived1's vfunc().\n";
}
};
Davomi..
/* derived2 sinf uchun vfunc() virtual funksiyasi derived1 sinfdan voris sifatida o’tgan. */