Pagkakaiba sa pagitan ng Virtual at Pure Virtual Function

May -Akda: Laura McKinney
Petsa Ng Paglikha: 2 Abril 2021
I -Update Ang Petsa: 13 Mayo 2024
Anonim
Архитектура ЭВМ | Основы Операционных Систем 04 | Ассемблер
Video.: Архитектура ЭВМ | Основы Операционных Систем 04 | Ассемблер

Nilalaman


Ang virtual na pag-andar at dalisay na virtual function na pareho ay ang mga konsepto ng polymorphism ng takbo ng oras. Ang pangunahing pagkakaiba sa pagitan ng 'virtual function ' at 'Purong virtual function' ay ang 'virtual function' ay may kahulugan sa klase ng base at din ang pagmamana ng mga nagmula na mga klase na muling tukuyin ito. Ang dalisay na virtual na pag-andar ay walang kahulugan sa klase ng base, at ang lahat ng nagmamana ng mga nagmula na mga klase ay dapat tukuyin itong muli.

Gayunpaman, ang virtual function ay tinatawag din bilang dynamic na dispatch at run-time dispatch, dahil sa pagpapaandar na tinatawag ay tinukoy sa oras ng pagtakbo alinsunod sa uri ng bagay na ginamit.

Ang Polymorphism ay suportado ng parehong mga wika C ++ at Java. Sa Java, ang salitang "overriding" ay ginagamit sa halip ng 'virtual function', dahil ang virtual function ay ang term ng C ++.

  1. Tsart ng paghahambing
  2. Kahulugan
  3. Pangunahing Pagkakaiba
  4. Konklusyon

Tsart ng paghahambing

Batayan para sa PaghahambingVirtual FunctionPure Virtual Function
PangunahingAng virtual na pag-andar ay may kahulugan sa klase ng base.Ang Pure Virtual Function ay walang kahulugan sa batayang klase.
Deklarasyonvirtual na functiont_name (parameter_list) {. . . . .};virtual na functiont_name (parameter_list) = 0;
Nagmula sa klaseAng lahat ng nagmula sa mga klase ay maaaring o hindi maaaring lampasan ang virtual na pag-andar ng klase ng base.Ang lahat ng nagmula sa mga klase ay dapat na lumampas sa virtual na pag-andar ng klase ng base.
Epekto

Ang mga virtual function ay hierarchical sa kalikasan; hindi ito nakakaapekto sa pag-iipon kung ang anumang nagmula na mga klase ay hindi lumampas sa virtual na pag-andar ng klase ng base.Kung ang lahat ng nagmula na mga klase ay mabibigo na ma-override ang virtual na function ng klase ng base, magaganap ang error sa compilation.
Abstract na klaseWalang konsepto.Kung ang isang klase ay naglalaman ng hindi bababa sa isang dalisay na virtual function, pagkatapos ito ay ipinahayag na abstract.


Kahulugan ng Virtual Function

Ang virtual function ay ang function ng miyembro ng base klase, at ito ay muling tukuyin ng mga nagmula na mga klase na nagmana sa klase ng base. Hindi kinakailangan na ang lahat ng nagmana sa mga nagmula na mga klase ay dapat tukuyin ang muling pag-andar sa virtual na pag-andar, ito ay muling tukuyin ng mga nagmula na mga klase na maaaring mangailangan ng paggana nito. Ang isang virtual function ay nilikha sa pamamagitan ng pagpapahayag ng pag-andar sa base ng klase na nauna sa keyword 'Virtual'.

Deklarasyon :

base ng klase {pampubliko: virtual type funt_name (parameter-list) {. . . };

Ang pagmamana ng mga nagmula na mga klase ay maaaring tukuyin ang virtual function na walang keyword na 'virtual'. Ang mga klase na nagmula ay muling tukuyin ang virtual na pag-andar upang makamit ang gawain nito. Tulad ng virtual na pag-andar ay muling tukuyin sa mga nagmula na mga klase, mayroon kaming maraming mga form ng parehong pag-andar. Ngayon, kung aling bersyon ng pag-andar ang tinawag, nakasalalay sa kung anong uri ng bagay ang tinutukoy upang maimbitahan ang pagpapaandar na iyon.


Pamana ng maraming tao

Sa pamana ng multilevel, kung saan ang isang nagmula na klase na nagmana ng virtual na function mula sa klase ng base nito, kapag ang sarili ay ginagamit bilang isang klase ng base para sa isa pang nagmula na klase, ang virtual function pa rin ay maaaring mapalitan. Kaya, kapag ang isang virtual na pag-andar ay minana ang virtual na kalikasan ay minana rin.

Ang mga virtual function ay hierarchical din sa likas na katangian, kung ang isang nagmula na klase ay hindi mag-override / muling tukuyin ang virtual na pag-andar na minana mula sa klase ng base at kapag hinango ng object ng klase ang virtual na pag-andar, kung gayon ang virtual na pag-andar na tinukoy ng batayang klase ay na-invoke.

Kahulugan ng Pure Virtual Function

Tulad ng nakikita sa itaas kung ang nagmula na klase ay hindi maibabalik ang virtual na pag-andar pagkatapos ang virtual function na tinukoy ng batayang klase ay ginagamit. Ngunit, paano kung ang batayang klase mismo ay hindi tukuyin ang virtual function. Maraming mga beses, ang batayang klase ay walang kahulugan para sa virtual na pag-andar, o kung nais mo na ang lahat ng mga nagmula na mga klase ay dapat na lampasan ang virtual function.

Upang hawakan ang mga ito sa itaas ng dalawang sitwasyon, suportado ng C ++ ang konsepto ng "Pure Virtual Function". Ang isang 'purong virtual function' ay idineklara sa base class ngunit walang kahulugan sa klase ng base. Ang purong virtual function ay ipinahayag bilang mga sumusunod.

virtual type na functiont_name (parameter_list) = 0;

Sa tuwing ang isang virtual na pag-andar sa klase ng base ay ginawang "dalisay", kung gayon ang bawat nagmula na klase ay dapat na mapagpapawalang-bisa ang dalisay na virtual na function ng klase ng base. Kung ang nagmula na klase ay nabigo sa pag-override ng dalisay na virtual function ng klase ng base, magreresulta ito sa error sa compilation.

Abstract na klase

Ang klase na naglalaman ng hindi bababa sa isang dalisay na pagpapaandar ay tinatawag na 'abstract class'. Walang mga bagay ng mga abstract na klase ang maaaring malikha, ngunit maaari kang lumikha ng mga sanggunian at mga payo sa mga abstract na klase. Ang mga miyembro ng abstract na klase ay maaaring ma-access sa pamamagitan ng object ng mga nagmula na mga klase na nagmana sa abstract na klase ng base.

Ang isang klase na nais mong ideklara na abstract, gamitin ang keyword 'Abstract' sa harap ng 'Klase' keyword.

// halimbawa ng abstract na klase ng pang-klase na pangalan {. . virtual type na functiont_name (parameter_list) = 0; . . };

  1. Ang mga virtual na pag-andar ay tiyak na tinukoy sa klase ng base at muling tukuyin (override) sa nagmula na klase. Sa kabilang banda, ang purong virtual function na ang klase ng base ay partikular na hindi tinukoy sa klase ng base
  2. Nagmula na klase kung kinakailangang redefine (override) ang virtual function samantalang, kung sakaling purong virtual function na nagmula sa klase ay dapat na muling tukuyin ang purong virtual function.
  3. Kung nabigo ang nagmula na klase na muling tukuyin (override) ang virtual function na maaari mong gamitin ang virtual function ng base class. Sa kabaligtaran, kung ang isang nagmula na klase ay nabigo sa pag-override ng purong virtual na pag-andar pagkatapos maganap ang compilation error.
  4. Ang klase ng base na naglalaman ng virtual function ay maaaring ma-instantiyang i.e. ang bagay ay maaaring malikha. Tulad ng laban, ang batayang klase na naglalaman ng dalisay na virtual function na i.e. isang abstract na klase ay hindi maaaring maiugnay bilang isang abstract na klase ay hindi ganap na tinukoy.

Tandaan:
Ang prototype ng 'virtual function' at 'purong virtual function' ay nananatiling pareho sa buong programa.

Konklusyon:

Ang 'virtual function' at 'purong virtual function' ay parehong may kahalagahan, tulad ng sa 'virtual function', lahat ng nagmula sa klase ay hindi kailangang tukuyin muli ang virtual function at kung saan nais naming ang lahat ng nagmula na klase ay dapat muling tukuyin ang virtual function, purong virtual pinakamahusay na naaangkop doon.