Paano Maipatupad ang Virtual Function sa C ++?



Ipakilala ka ng artikulong ito sa isa pang konsepto ng programa na Virtual Function sa C ++. Ang konsepto ay susuportahan ng pagpapakita.

Isang virtual na function sa C ++ ay isang pag-andar ng miyembro sa loob ng batayang klase na binibigyang-kahulugan namin sa isang nagmula sa klase. Tutulungan ka ng artikulong ito na tuklasin ang konsepto nang detalyado. Saklaw ang artikulong ito sa artikulong ito,

Kaya't magsimula tayo sa artikulong ito sa Virtual Function sa C ++





Ano ang Virtual Function?

Ang isang virtual na pagpapaandar ay isang pag-andar ng miyembro sa loob ng batayang klase na tinukoy namin sa isang nagmula sa klase. Ito ay idineklara gamit ang virtual keyword. Kapag ang isang klase na naglalaman ng virtual na pag-andar ay minana, ang nagmula sa klase ay binabago ang kahulugan ng virtual na function upang umangkop sa sarili nitong mga pangangailangan.

i-install ang php sa windows 10

Nagpapatuloy sa artikulong ito sa Virtual Function sa C ++



Mga Panuntunan para sa Virtual Function sa C ++:

  • Palagi silang tinukoy sa isang batayang klase at na-override sa nagmula sa klase ngunit hindi ito sapilitan na mag-override sa nagmula sa klase.
  • Ang mga virtual na pag-andar ay dapat ideklara sa seksyon ng publiko ng klase.
  • Hindi sila maaaring static o pag-andar ng kaibigan ay hindi rin maaaring maging virtual function ng ibang klase.
  • Ang mga virtual function ay dapat na ma-access gamit ang isang pointer upang makamit ang run time polymorphism.

Nagpapatuloy sa artikulong ito sa Virtual Function sa C ++.

Ano ang umiiral?

Ang umiiral para sa mga pagpapaandar ay nangangahulugan na saanman mayroong isang tawag na pag-andar, kailangang malaman ng tagatala kung aling kahulugan ng pag-andar ang dapat itong maitugma. Ito ay nakasalalay sa lagda ng bawat pagpapaunlad ng pagpapaandar at mga takdang-aralin na kinuha. Gayundin, kailangang malaman ng tagatala na kapag ang pagtutugma na ito sa pagitan ng tawag na pag-andar at pagpili ng wastong kahulugan ay mangyayari.

Nagpapatuloy sa artikulong ito sa Virtual Function sa C ++



Maagang Pagbubuklod

Ang maagang pagbubuklod ay isang kababalaghan kung saan ang desisyon na tumugma sa iba't ibang mga tawag sa pag-andar ay nangyayari sa oras ng pagsulat mismo at direktang iniuugnay ng tagatala ang link sa mga address. Kilala rin ito bilang Static Binding o Compile-time Binding.

  • Tulad ng alam naming nagsusulat kami ng code sa mataas na antas na wika
  • Pagkatapos ay binago ito ng tagatala sa mababang antas na wika na mauunawaan ng computer, karamihan sa wika ng makina sa oras ng pagtitipon
  • Sa maagang pagbubuklod, direktang nagbibigay ang tagatala ng address ng tagubilin sa deklarasyon ng pag-andar sa tagubilin sa tawag na function
  • Kaya't tulad ng ipinahihiwatig ng pangalan ang pagbubuklod ay nangyayari nang napakaaga bago magpatakbo ang programa.

Halimbawa

# isama ang paggamit ng namespace std class Mga Hayop {publiko: walang bisa ang tunog () {cout<< 'Genric animal sound' << endl } } class Cats: public Animals { public: void sound() { cout << 'Cat meow' <tunog () // maagang nagbubuklod na pagbalik 0}

Paglabas

Output- Virtual na pag-andar sa C ++ - Edureka

paglilinaw ion
Sa halimbawang ito, gumawa kami ng isang pointer a sa magulang na mga hayop na klase. Pagkatapos sa pamamagitan ng pagsulat ng isang = & c, ang pointer 'a' ay nagsimulang mag-refer sa object c ng mga klase na Pusa.
a -> tunog () - Sa pagtawag sa tunog ng pag-andar () na naroroon sa parehong klase ng pointer na 'a', tinawag ang pagpapaandar ng magulang na klase, kahit na ang pointer ay tumutukoy sa object ng klase ng Mga Pusa .

Ito ay dahil sa Early Binding. Alam namin na ang 'a' ay isang pointer ng magulang na klase na tumutukoy sa object ng klase ng bata. Dahil ang maagang pagbubuklod ay nagaganap sa oras ng pagtitipon, samakatuwid nang nakita ng tagatala na ang 'a' ay isang pointer ng magulang na klase, naitugma nito ang tawag sa pagpapaandar ng 'tunog ()' ng magulang na klase nang hindi hinahanap ang bagay na itinuro nito ay tumutukoy sa.

Nagpapatuloy sa artikulong ito sa Virtual Function sa C ++

Late Binding

Sa huli na pagbubuklod, kinikilala ng tagatala ang bagay sa runtime at pagkatapos ay tumutugma sa tawag na pag-andar na may wastong pag-andar. Kilala rin ito bilang Dynamic Binding o Runtime Binding.

Ang huli na pagbubuklod sa problema sa itaas ay maaaring malutas sa pamamagitan ng paggamit ng virtual na keyword sa batayang klase. Tingnan natin kung paano ito nangyayari sa pamamagitan ng paggamit mismo ng halimbawa sa itaas, ngunit nagdaragdag lamang ng virtual na keyword.

Halimbawa

# isama ang paggamit ng namespace std class Mga Hayop {publiko: virtual void sound () {cout<< 'Genric aniaml sound' << endl } } class Cats: public Animals { public: void sound() { cout << 'Cats meow' <tunog () ibalik 0}

Paglabas

Paliwanag
Narito ang tunog ng pag-andar () ng batayang klase ay ginawang virtual, sa gayon ang tagatala ngayon ay gumaganap ng huli na pagbubuklod para sa pagpapaandar na ito. Ngayon, ang tawag sa pagpapaandar ng tunog () na pagpapaandar ay maitutugma sa kahulugan ng pagpapaandar sa runtime. Dahil nakikilala na ng tagatala ang pointer na 'a' na tumutukoy sa object na 'c' ng nagmula sa klase na Mga Pusa, tatawagin nito ang tunog () na pagpapaandar ng klase ng Mga Pusa.

paggamit ng iterator sa java

Nagpapatuloy sa artikulong ito sa Virtual Function sa C ++

Purong Pag-andar ng Virtual

Ang isang purong virtual na pag-andar sa C ++ ay isang virtual na pag-andar kung saan wala kaming pagpapatupad, idineklara lamang namin ito. Ang isang purong virtual function ay idineklara sa pamamagitan ng pagtatalaga ng 0 sa deklarasyon.

virtual na walang bisa na tunog () = 0

Narito ang tunog () ay isang purong virtual fuction.

Nagpapatuloy sa artikulong ito sa Virtual Function sa C ++

Abstract Class

Ang isang abstract na klase ay tinukoy bilang isang klase na may isa o higit pang mga purong virtual function. Tulad ng ipinaliwanag sa itaas purong virtual na pag-andar ay isang pag-andar ng virtual na miyembro na minarkahan bilang walang pagpapatupad. Wala itong posible na pagpapatupad sa impormasyong ibinigay sa klase, kabilang ang anumang mga pangunahing klase. Ang isang abstract na klase ay kilala rin bilang isang abstract base class.

Halimbawa

# isama ang paggamit ng namespace std class na Empleyado // abstract base class {virtual int getSalary () = 0 // purong virtual function} klase ng Empleyado_1: pampubliko na Empleyado {int suweldo sa publiko: Empleyado_1 (int s) {suweldo = s} int getSalary () {return suweldo}} klase na Empleyado_2: pampubliko na Empleyado {int suweldo sa publiko: Empleyado_2 (int t) {suweldo = t} int getSalary () {sweldo sa pagbalik}} int pangunahing () {Empleyado_1 e1 (5000) Empleyado_2 e2 (3000) int a, ba = e1.getSalary () b = e2.getSalary () cout<< 'Salary of Developer : ' << a << endl cout << 'Salary of Driver : ' << b << endl return 0 } 

Paglabas

Paliwanag
Ang pagpapaandar na 'getSalary ()' sa klase na empleyado ay isang purong virtual function. Dahil ang klase ng empleyado ay naglalaman ng purong virtual function, samakatuwid ito ay isang abstract base class.
Dahil ang purong virtual na pag-andar ay tinukoy sa mga subclass, samakatuwid ang pagpapaandar na 'getSalary ()' ay tinukoy sa parehong mga subclass ng klase ng Empleyado sa Empleyado_1 at Empleyado_2.

Nagpapatuloy sa artikulong ito sa Virtual Function sa C ++

Halimbawa para sa Virtual Function

# isama ang paggamit ng namespace std class base {public: void function_1 () {cout<< 'base class function 1n' } virtual void function_2() { cout << 'base class function 2n' } virtual void function_3() { cout << 'base class function 3n' } virtual void function_4() { cout << 'base class function 4n' } } class derived : public base { public: void function_1() { cout << 'derived class function 1n' } void function_2() { cout << 'derived class function 2n' } void function_4(int x) { cout function_2 () ptr-> function_3 () ptr-> function_4 ()}

Paglabas

Paliwanag
Para sa function_1 () function call, base class na bersyon ng pagpapaandar ay tinawag, ang function_2 () ay na-override sa nagmula sa klase kaya ang tinatawag na bersyon ng klase ay tinawag, ang function_3 () ay hindi pinalampas sa nagmula sa klase at virtual na pag-andar kaya't ang bersyon ng base class ay tinatawag na, katulad ng function_4 () ay hindi na override kaya ang bersyon ng base class ay tinawag.

Sa gayon ay natapos na kami sa artikulong ito sa 'Virtual Function in C ++'. Kung nais mong matuto nang higit pa, tingnan ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online. Ang kurso sa pagsasanay at sertipikasyon ng Java J2EE at SOA ng Edureka ay idinisenyo upang sanayin ka para sa parehong core at advanced na mga konsepto ng Java kasama ang iba't ibang mga balangkas ng Java tulad ng Hibernate & Spring.

default na halaga para sa char sa java

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng blog na ito at babalikan ka namin sa lalong madaling panahon.