Kako implementirati navidezno funkcijo v C ++?



Ta članek vam bo predstavil še en koncept programiranja, ki je navidezna funkcija v jeziku C ++. Koncept bo podprt s predstavitvami.

Navidezna funkcija v C ++ je funkcija člana znotraj osnovnega razreda, ki jo na novo definiramo v izpeljanem razredu. Ta članek vam bo pomagal podrobno raziskati koncept. V tem članku bodo zajeti naslednji napotki:

Začnimo s tem člankom o navidezni funkciji v jeziku C ++





Kaj je navidezna funkcija?

Navidezna funkcija je funkcija člana v osnovnem razredu, ki jo na novo definiramo v izpeljanem razredu. Deklarira se z uporabo navidezne ključne besede. Ko je razred, ki vsebuje navidezno funkcijo, podedovan, izpeljani razred na novo definira navidezno funkcijo, da ustreza svojim potrebam.

Nadaljujemo s tem člankom o navidezni funkciji v jeziku C ++



Pravila za navidezno funkcijo v jeziku C ++:

  • Vedno so definirani v osnovnem razredu in razveljavljeni v izpeljanem razredu, vendar v izpeljanem razredu ni obvezno preglasiti.
  • Navidezne funkcije je treba prijaviti v javnem odseku razreda.
  • Ne morejo biti statične ali prijateljske funkcije, prav tako ne morejo biti navidezne funkcije drugega razreda.
  • Do virtualnih funkcij je treba dostopati s kazalcem, da dosežemo polimorfizem med izvajanjem.

Nadaljujemo s tem člankom o navidezni funkciji v jeziku C ++.

Kaj je zavezujoče?

Vezava za funkcije pomeni, da mora prevajalnik, kjer koli je klic funkcije, vedeti, kateri definiciji funkcije naj se ujema. To je odvisno od podpisa vsake izjave funkcije in prevzetih nalog. Prevajalnik mora vedeti tudi, da se bo zgodilo to ujemanje med klicem funkcije in izbiro pravilne definicije.

Nadaljujemo s tem člankom o navidezni funkciji v jeziku C ++



Zgodnja vezava

Zgodnja vezava je pojav, pri katerem se odločitev za ujemanje različnih funkcijskih klicev zgodi v času samega prevajanja in prevajalnik povezavo neposredno poveže z naslovi. Znano je tudi kot statična vezava ali vezava v času prevajanja.

  • Kot vemo, pišemo kodo v jeziku na visoki ravni
  • Nato ga prevajalnik pretvori v jezik nizke ravni, ki ga računalnik lahko razume, večinoma v strojnem jeziku v času prevajanja
  • V zgodnji vezavi prevajalnik neposredno posreduje naslov navodila za izjavo funkcije navodilu za klic funkcije
  • Kot že ime pove, se vezava zgodi zelo zgodaj, preden se program zažene.

Primer

kako zapreti program v javi -
#include z uporabo imenskega prostora std razred Živali {public: void sound () {cout<< 'Genric animal sound' << endl } } class Cats: public Animals { public: void sound() { cout << 'Cat meow' <sound () // vrnitev v zgodnjo vezavo 0}

Izhod

Izhod - navidezna funkcija v jeziku C ++ - Edureka

pojasnila ion
V tem primeru smo ustvarili kazalec a na nadrejeni razred Živali. Nato se je s pisanjem a = & c kazalka 'a' začela sklicevati na objekt c razreda Cats.
a -> zvok () - Ko pokličete funkcijo sound (), ki je v obeh razredih prisotna s kazalcem 'a', je bila poklicana funkcija nadrejenega razreda, tudi če se kazalnik nanaša na predmet razreda Cats .

To je posledica zgodnje vezave. Vemo, da je 'a' kazalec nadrejenega razreda, ki se nanaša na objekt podrejenega razreda. Ker zgodnja vezava poteka v času prevajanja, je torej prevajalnik, ko je videl, da je 'a' kazalec nadrejenega razreda, klic ujemal s funkcijo 'sound ()' nadrejenega razreda, ne da bi poiskal predmet kazalec se nanaša na.

Nadaljujemo s tem člankom o navidezni funkciji v jeziku C ++

Pozna vezava

V pozni vezavi prevajalnik med izvajanjem identificira objekt in nato klic funkcije poveže s pravilno funkcijo. Znana je tudi kot dinamična vezava ali vezava med izvajanjem.

Pozno vezavo v zgornjem problemu je mogoče rešiti z uporabo navidezne ključne besede v osnovnem razredu. Poglejmo, kako se to zgodi, tako da uporabimo zgornji primer sam, vendar samo z dodajanjem virtualne ključne besede.

Primer

#include z uporabo imenskega prostora std razred Živali {public: virtual void sound () {cout<< 'Genric aniaml sound' << endl } } class Cats: public Animals { public: void sound() { cout << 'Cats meow' <zvok () vrnitev 0}

Izhod

Pojasnilo
Tu je funkcijski zvok () osnovnega razreda navidezen, zato prevajalnik zdaj izvaja pozno vezavo za to funkcijo. Zdaj se klic funkcije funkcije sound () med izvajanjem ujema z definicijo funkcije. Ker prevajalnik zdaj identificira kazalec 'a' kot sklic na objekt 'c' izpeljanega razreda Cats, bo poklical funkcijo sound () razreda Cats.

Nadaljujemo s tem člankom o navidezni funkciji v jeziku C ++

Čista navidezna funkcija

Čista navidezna funkcija v jeziku C ++ je navidezna funkcija, za katero nimamo izvedbe, temveč jo le prijavimo. Čista navidezna funkcija je deklarirana z dodelitvijo 0 v deklaraciji.

virtualni prazninski zvok () = 0

metoda razvrščanja c ++

Tu je zvok () čisto navidezna fukcija.

Nadaljujemo s tem člankom o navidezni funkciji v jeziku C ++

Povzetek

Abstraktni razred je opredeljen kot razred z eno ali več čistimi navideznimi funkcijami. Kot je razloženo zgoraj, je navidezna funkcija funkcija navideznega člana, ki je označena kot brez izvedbe. Z informacijami v razredu, vključno z osnovnimi razredi, ni izvedbe. Abstraktni razred je znan tudi kot abstraktni osnovni razred.

Primer

#include using namespace std class Employee // abstraktni osnovni razred {virtual int getSalary () = 0 // pure virtual function} class Employee_1: public Employee {int plača public: Employee_1 (int s) {plača = s} int getSalary () {povratna plača}} razred Zaposleni_2: javni Zaposleni {int plača public: Zaposleni_2 (int t) {plača = t} int getSalary () {vrnitev plače}} int main () {Zaposleni_1 e1 (5000) Zaposleni_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 } 

Izhod

kako natisniti matriko

Pojasnilo
Funkcija ‘getSalary ()’ v razredu Employee je čista navidezna funkcija. Ker razred Employee vsebuje čisto navidezno funkcijo, je torej abstraktni osnovni razred.
Ker je čista navidezna funkcija definirana v podrazredih, je torej funkcija 'getSalary ()' definirana v obeh podrazredih razreda Zaposleni, tj. V Zaposleni_1 in Zaposleni_2.

Nadaljujemo s tem člankom o navidezni funkciji v jeziku C ++

Primer za navidezno funkcijo

#include z uporabo imenskega prostora 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 ()}

Izhod

Pojasnilo
Za funkcijski klic function_1 () se pokliče različica funkcije osnovnega razreda, funkcija_2 () se preglasi v izpeljanem razredu, zato se pokliče različica izpeljanega razreda, funkcija_3 () ni razveljavi v izpeljanem razredu in je navidezna funkcija, zato se pokliče različica osnovnega razreda, podobno funkcija_4 () ni razveljavljena, zato se pokliče različica osnovnega razreda.

Tako smo prišli do konca tega članka o 'Navidezni funkciji v C ++'. Če želite izvedeti več, si oglejte Edureka, zaupanja vredno podjetje za spletno učenje. Edurekin tečaj za usposabljanje in certificiranje Java J2EE in SOA je zasnovan tako, da vas usposobi za temeljne in napredne koncepte Java, skupaj z različnimi Java okviri, kot sta Hibernate & Spring.

Imate vprašanje za nas? Prosimo, omenite to v oddelku za komentarje tega spletnega dnevnika, mi pa se vam bomo javili v najkrajšem možnem času.