Skip to main content

Ano ang virtual na mana?

Ang virtual na mana ay isang uri ng mana kung saan hindi kumpleto ang pagpapatupad ng isang superclass, at kinakailangan ang isang subclass para sa kumpletong kahulugan ng isang bagay.Ang ganitong uri ng mana ay maaaring magamit kasabay ng parehong solong at maraming mana, ngunit kadalasang ginagamit sa maraming mana.Ang anumang klase na nagmamana mula sa isang virtual base class ay nagiging isang direktang subclass ng base class na iyon.Ang isang virtual base class ay maaaring umasa sa isang subclass upang maipatupad ang lahat ng mga pamamaraan nito, ngunit hindi ito kinakailangan.Upang ideklara ang virtual na mana sa C ++, ginagamit ang virtual na keyword.Parehong ang superclass at subclass ay dapat magpahayag ng mga virtual na pamamaraan na may virtual na keyword.Sinasabi nito sa C ++ compiler na ang superclass ay hindi kumpleto, at dapat itong makakuha ng impormasyon mula sa subclass upang makumpleto ito.Ang paggamit ng subclass upang makumpleto ang superclass ay hindi nangangahulugang ang mga subclass ay mag -overwrite sa bawat isa kung mayroon silang parehong klase ng base, at sa halip ang C ++ compiler ay nag -aalaga sa pagtukoy kung anong mga piraso ang pupunta sa bawat bagay.Ang pamana, pandaigdigang pag -andar sa C ++ ay hindi maipahayag na virtual.Ang uri ng mana na ito ay maaari lamang magamit kapag sumunod sa mga prinsipyo na nakatuon sa object-oriented (OOP).Ang dahilan para dito ay ang mga pandaigdigang pag-andar ay hindi nauugnay sa isang partikular na klase, at sa gayon ay karaniwang may sarili sa kanilang sarili.Kung walang isang superclass at subclass mana ay hindi maaaring mangyari, kaya ang mga pandaigdigang pag -andar at virtual na mana ay kapwa eksklusibo.Ang mga pandaigdigang pag -andar ay maaaring, sa teorya, ay gagamitin sa loob ng mga virtual na pag -andar, ngunit ang reverse ay maaaring hindi palaging gumana.Sa maraming mana, ang isa ay maaaring magkaroon ng isang base na klase A na mayroong dalawang subclass, B at C, at pagkatapos ay isang klase D na nagmamana mula sa parehong mga klase B at C. Ang pattern na ito ay karaniwang tinatawag na Diamond of Death dahil kung ang mga klase A, B,At ang lahat ay may mga pagpapatupad ng parehong pamamaraan, hindi posible para sa Class D upang matukoy kung aling pagpapatupad ang dapat nitong gamitin.Ang virtual na mana ay nalulutas ang problemang ito dahil ang bawat pagpapatupad ng klase ay nananatiling natatangi, at samakatuwid ay hindi malabo.Ang pagkakaiba na ito ay hinahawakan ng mga dalubhasang panloob na bagay na tinatawag na Virtual Tables (VTables) na sinusubaybayan ang bawat uri ng bagay, ngunit ang mga talahanayan na ito ay hindi kailangang malinaw na manipulahin ng isang programmer dahil sila ay binuo sa wika.