Skip to main content

Ano ang isang virtual function?

Ang isang virtual na pag -andar ay isang function, na tinukoy sa isang superclass, dapat na naroroon sa isang subclass para sa subclass na magkaroon ng isang kumpletong kahulugan ng klase.Ang mga virtual na pag-andar ay umaasa sa isang object-oriented na programming paradigma na tinatawag na Virtual Inheritance, na kung saan ay kadalasang nakikita sa C ++ gamit ang virtual keyword.Upang tukuyin ang isang virtual na pag -andar, ang dalawang klase ay kinakailangan, isang superclass at isang subclass.Ang superclass ay kung saan ang pag -andar ay unang ipinahayag, at posibleng tinukoy.Ang subclass ay kung saan ang pag -andar ay tinukoy at mdash;o overridden, depende sa kung ang pag -andar ay tinukoy sa superclass.

Ang virtual function ay maaaring tukuyin sa isa sa dalawang paraan.Una, maaari itong tukuyin bilang isang tangkay, kung saan mayroon itong isang walang laman na katawan at wala.Pangalawa, maaari itong tukuyin bilang isang purong virtual function, kung saan ito ay tinukoy bilang Null sa file ng header ng SuperClasss.

May mga pakinabang at kawalan sa parehong mga pamamaraan.Ang pagtukoy ng isang function bilang isang stub ay nagsisiguro na ang lahat ng mga subclass ay may ilang pagpapatupad nito, kahit na wala itong ginawa.Kung ang isang tao ay nakakalimutan na i -override ang pag -andar at ipatupad ito nang maayos sa isang subclass, gayunpaman, walang mga pagkakamali o babala na lilitaw upang ituro ito.Ang pagtukoy ng isang dalisay na virtual na pag-andar, sa kabilang banda, ay nangangailangan ng bawat subclass na magkaroon ng sariling kahulugan ng pag-andar, at ang mga pagkakamali ay lilitaw kung hindi ito ang kaso.Ang mga virtual na pag -andar, kaya ang mga hierarchies ng mana na may higit sa dalawang antas ay maaaring hindi nangangailangan ng tahasang mga kahulugan ng mga virtual na pag -andar.Halimbawa, maaaring isaalang -alang ng isa ang isang Class A na nagpapahayag ng isang virtual na pag -andar, na ipinatupad sa subclass B. Class B ay may isang subclass ng sarili nito, ang klase C. Class C ay hindi nangangailangan ng isang malinaw na kahulugan ng klase bilang pag -andar, sapagkat nagmamana itoAng kahulugan mula sa Klase B. Kung kinakailangan, ang Class C ay maaaring mag -override ng function ng klase ng BS, o maaari itong ma -override ang pag -andar ng klase ng BS habang tinatawag din ito.

Sa iba pang matinding, ang mga virtual na pag -andar ay hindi kailangang tukuyin sa isang subclass kung ipinahayag na virtual sa subclass na iyon.Halimbawa, maaaring isaalang -alang ng isa ang isang Class A na nagpapahayag ng isang virtual na pag -andar at may dalawang subclass, B at C. Bilang karagdagan, maiisip ng isang tao na ang Class B ay may mga subclass D at E, at ang Subclass C ay may mga subclass f at G.

mga klaseB Sa pamamagitan ng g lahat ay dapat magkaroon ng klase bilang virtual function na tinukoy kahit papaano.Kung ang Class B ay may pagpapatupad ng AS function, ang mga klase D at E ay hindi kailangan itong muling mabuo.Marahil ang mga subclass ng CS ay kailangang ipatupad bilang pag -andar, ngunit pareho silang gumawa ng ibang bagay, kaya ang pagtukoy sa pag -andar sa Class C mismo ay hindi magiging kapaki -pakinabang.Sa kasong iyon, ang pag -andar ay maaaring ipahayag na virtual sa klase C, at hindi kinakailangan ang isang pagpapatupad..Maraming mga pitfalls na may virtual na pag -andar, gayunpaman, lalo na tungkol sa maraming mana.Sa maraming mana, posible para sa hindi malinaw na tinukoy na virtual na pag -andar upang salungatan sa bawat isa, kaya dapat silang magamit nang may pag -iingat sa konteksto na iyon.