Introduktion til virtuelt nøgleord i C ++

Et virtuelt nøgleord i C ++ bruges til at oprette en virtuel funktion i C ++. Den virtuelle funktion er den overordnede klassefunktion, som vi ønsker at omdefinere i børneklassen. Den virtuelle funktion erklæres ved hjælp af nøgleordet virtuel. Når vi definerer den virtuelle funktion, skal nøgleordet virtuel fortsætte i erklæringen af ​​funktionen. Det virtuelle nøgleord fortæller kompilatoren om at udføre sen binding eller dynamisk linking på funktionen.

Den enkelte markør skal henvise til alle objekter i forskellige klasser. Derfor oprettes markøren på superklassen for at henvise til alle objekter i den afledte klasse, og derefter indeholder superklasse-markøren adressen på objektet i den afledte klasse, der altid kører superklasse-funktionen. Så for at løse dette bruger vi den virtuelle funktion. Så når den virtuelle funktion oprettes i superklassen, identificerer C ++ -kompilatoren, hvilken funktion der skal udføres på kørselstidspunktet, og identifikationen af ​​funktionen tager baseret på den type objekt, som superklasse-pegeren peger på.

Virtuel funktion

Syntaksens virtuelle funktioner er givet nedenfor:

Syntaks

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

Som i syntaksen erklærer det sjove () ved hjælp af det virtuelle nøgleord, hvilket betyder, at barneklassen kan omdefinere de samme metoder.

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
)

Produktion:

I ovenstående program superklassen A med funktionen disp (), som er omskrevet i den afledte klasse B. I hovedfunktionen opfordrer disp () -metoden obj1-objektet (som er en dynamisk binding eller sen binding). er en proces, hvor den specifikke funktion, der skal udføres, afgøres ved kørselstidspunktet) og disp () -funktionen i klasse A udfø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
)

Produktion:

Ovenstående programkode er ændring af program 1, disp () -funktionen er defineret med nøgleordet virtuelt, og nu, når obj1, der kalder disp () -funktionen, udføres disp () -funktionen i barneklasse B.

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
)

Produktion:

Ovenstående programkode er ændringen af ​​programmet 2, disp () -funktionen, som også omdefineres med nøgleordet virtuel i klasse B, og nu når obj1, der kalder disp () -funktionen, disp () -funktionen i børneklasse B henrettes.

Dernæst skriver vi programmet til den rene virtuelle funktion. Den rene virtuelle funktion er en funktion, som don ikke havde implementeringer af. Den rene virtuelle funktion kaldes også en abstrakt virtuel funktion. Den rene virtuelle funktionserklæring tildeler 0, som vist i nedenstående kode -

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
)

Produktion:

Fordele ved virtuelt nøgleord i C ++

  • Virtuelle funktioner bruges til at opnå runtime-polymorfisme.
  • Hvis en klasse er afledt af en klasse, der har en virtuel funktion, kan funktionsdefinitionen omdefineres i den afledte klasse.

Regler for virtuelt nøgleord i C ++

  • Det virtuelle nøgleord i C ++ bruges i funktionserklæringen.
  • Virtuelle funktioner skal være klassemedlemmer.
  • Den virtuelle funktion, der fås adgang til via objekt-pointers.
  • Den virtuelle funktion kan ikke erklæres som statisk.
  • Den virtuelle funktion kan være venner fra en anden klasse.
  • Hvis den virtuelle funktion ikke bruges i superklassen, kan vi også definere den i superklassen.
  • Underskrivelsen af ​​en virtuel funktion af superklassen og børneklasserne skal være den samme, såkaldt som funktion overstyrende, ellers hvis de to funktioner med samme navn men forskellige signaturer, betragtes det som de overbelastede funktioner i C ++.
  • Vi kan have en virtuel destruktør, men ikke have en virtuel konstruktør.

Konklusion

  • Et virtuelt nøgleord i C ++ bruges til at oprette en virtuel funktion i C ++.
  • Den virtuelle funktion er den overordnede klassefunktion, som vi ønsker at omdefinere i børneklassen.
  • Den enkelte markør skal henvise til alle objekter i forskellige klasser.
  • Superclass-markøren indeholder adressen på objektet i den afledte klasse, kører altid superklassefunktionen.
  • De virtuelle funktioner skal være klassemedlemmer, skal være klassemedlemmer, kan ikke erklæres som statiske, fås adgang til via objektpekere.
  • Underskrivelsen af ​​en virtuel funktion af superklassen og børneklasserne skal være den samme, såkaldt som funktion overstyrende, ellers hvis de to funktioner med samme navn men forskellige signaturer, betragtes det som de overbelastede funktioner i C ++.

Anbefalede artikler

Dette er en guide til det virtuelle nøgleord i C ++. Her diskuterer vi introduktionen og fordelene ved virtuelt nøgleord i C ++ sammen med dets syntaks for den virtuelle funktion. Du kan også gennemgå vores andre foreslåede artikler for at lære mere -

  1. Metodeoverskridelse i C #
  2. Arv i C #
  3. C # kommandoer
  4. Java-kommandoer
  5. Overstyring i Java
  6. Polymorfisme i Java
  7. Top 11 funktioner og fordele ved C ++

Kategori: