Introduksjon til virtuelt nøkkelord i C ++

Et virtuelt nøkkelord i C ++ brukes til å lage en virtuell funksjon i C ++. Den virtuelle funksjonen er foreldreklassefunksjonen som vi ønsker å definere på nytt i barneklassen. Den virtuelle funksjonen deklareres ved å bruke søkeordet virtuell. Når vi definerer den virtuelle funksjonen, skal nøkkelordet virtuell fortsette i erklæringen av funksjonen. Det virtuelle nøkkelordet forteller kompilatoren om å utføre sen binding eller dynamisk kobling på funksjonen.

Enkeltpekeren må referere til alle objekter i forskjellige klasser. Derfor opprettes pekeren på superklassen for å henvise til alle objektene i den avledede klassen, og deretter inneholder superklassepekeren adressen til objektet til den avledede klassen, kjører alltid superklasse-funksjonen. Så for å løse dette bruker vi den virtuelle funksjonen. Så når den virtuelle funksjonen opprettes i superklassen, identifiserer C ++ -kompilatoren hvilken funksjon som skal utføres på kjøretid, og identifiseringen av funksjonen tar basert på typen objekt superklassepekeren peker.

Virtuell funksjon

Syntaksens virtuelle funksjoner er gitt nedenfor:

syntax

class name_class
(
public :
virtual return fun(arg1, arg2, ..)
(
//code inside the function
)
)

Som i syntaksen erklærer moroa () ved det virtuelle nøkkelordet, noe som betyr at barneklassen kan definere de samme metodene på nytt.

Program 1:

#include
using namespace std;
class A
(
public:
void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Late Binding Occurs
)

Produksjon:

I det ovennevnte programmet superklassen A som har funksjonen disp (), som er omskrevet i den avledede klasse B. I hovedfunksjonen kaller disp () -metoden obj1-objektet (som er en dynamisk binding eller sen binding). er en prosess der hvilken spesifikk funksjon å utføre bestemmer ved kjøretid) og disp () -funksjonen til klasse A utføres.

Program 2:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A \n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Produksjon:

Den ovennevnte programkoden er endringen av programmet 1, disp () -funksjonen er definert med virtuelt nøkkelord og nå når obj1 som kaller disp () -funksjonen, blir disp () -funksjonen til barneklasse B utført.

Program 3:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
virtual void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Produksjon:

Programkoden ovenfor er endringen av programmet 2, disp () -funksjonen som også omdefineres med nøkkelordet virtuell i klasse B, og nå når obj1 som kaller disp () -funksjonen, disp () -funksjonen til barneklasse B henrettes.

Deretter skriver vi programmet for den rene virtuelle funksjonen. Den rene virtuelle funksjonen er en funksjon som ikke hadde implementeringer. Den rene virtuelle funksjonen kalles også en abstrakt virtuell funksjon. Den rene virtuelle funksjonserklæringen tildeler 0, som vist i koden nedenfor -

Program 4:

#include
using namespace std;
class A
(
public:
virtual void disp()=0;
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Produksjon:

Fordeler med virtuelt nøkkelord i C ++

  • Virtuelle funksjoner brukes for å oppnå polymorfisme av kjøretid.
  • Hvis en klasse er avledet fra en klasse som har en virtuell funksjon, kan funksjonsdefinisjonen omdefineres i den avledede klassen.

Regler for virtuelt nøkkelord i C ++

  • Det virtuelle nøkkelordet i C ++ bruker i funksjonserklæringen.
  • Virtuelle funksjoner må være klassemedlemmer.
  • Den virtuelle funksjonen nås via objektpekere.
  • Den virtuelle funksjonen kan ikke deklareres som statisk.
  • Den virtuelle funksjonen kan være venner fra en annen klasse.
  • Hvis den virtuelle funksjonen ikke brukes i superklassen, kan vi også definere den i superklassen.
  • Signaturen til en virtuell funksjon av superklassen og barneklassene skal være den samme, såkalt som funksjon overstyre, ellers hvis de to funksjonene med samme navn, men ulik signatur, blir det betraktet som de overbelastede funksjonene i C ++.
  • Vi kan ha en virtuell destruktør, men ikke ha en virtuell konstruktør.

Konklusjon

  • Et virtuelt nøkkelord i C ++ brukes til å lage en virtuell funksjon i C ++.
  • Den virtuelle funksjonen er foreldreklassefunksjonen som vi ønsker å definere på nytt i barneklassen.
  • Enkeltpekeren må referere til alle objekter i forskjellige klasser.
  • Superklasse-pekeren inneholder adressen til objektet i den avledede klassen, kjører alltid superklasse-funksjonen.
  • De virtuelle funksjonene må være klassemedlemmer, må være klassemedlemmer, kan ikke deklareres som statiske, få tilgang til gjennom objektpekere.
  • Signaturen til en virtuell funksjon av superklassen og barneklassene skal være den samme, såkalt som funksjon overstyre, ellers hvis de to funksjonene med samme navn, men ulik signatur, blir det betraktet som de overbelastede funksjonene i C ++.

Anbefalte artikler

Dette er en guide til det virtuelle nøkkelordet i C ++. Her diskuterer vi introduksjonen og fordelene ved virtuelt nøkkelord i C ++ sammen med syntaks for den virtuelle funksjonen. Du kan også gå gjennom andre foreslåtte artikler for å lære mer -

  1. Metodeoverskridelse i C #
  2. Arv i C #
  3. C # Kommandoer
  4. Java-kommandoer
  5. Overstyrer i Java
  6. Polymorfisme i Java
  7. Topp 11 funksjoner og fordeler med C ++