class X { ...; f () ; ... };
class Y: public X { ... };
class Z: public X { ... };
class D: public Y, public Z { ... };
Bu misolda X sinf D sinfning ikki marta o’rtacha vorisi bo’ladi. Bizning misolimizda ikkita qiymati qatnashadi, va shuning uchun bir qiymatli bo’lmagan D sinfning obyekti X sinfning aniq komponentiga murojat qulayligini bartaraf qilish kerak, uni to’liq kvalifikatsiyasi D::Y::X::f() yoki D::Z::X::f(). D sinfning obyekti ichida sodda ko’rinish Y::X::f() yoki Z::X::f(), lekin bu ham kvalifikatsiyani mazmunidir.
Bir xil nomdagi obyektlarni bartaraf qilishda to’g’ri bo’lmagan sinf bazalari ko’plik vorislari, bu sinf bazalari virtual deb e’lon qilinadi. Buning uchun sinf bazalari ro’yxatida oldingi sinf nomini virtual kalit so’zini ishlatish kerak. Misol uchun X sinfi virtual baza sinfi bo’la oladi bunaqa ko’rinishda yozilganda:
Do'stlaringiz bilan baham: |