Inleiding tot virtueel trefwoord in C ++

Een virtueel trefwoord in C ++ wordt gebruikt om een ​​virtuele functie in C ++ te maken. De virtuele functie is de ouderklasse-functie die we opnieuw willen definiëren in de onderliggende klasse. De virtuele functie wordt gedeclareerd met het trefwoord virtual. Wanneer we de virtuele functie definiëren, gaat het trefwoord virtueel verder in de verklaring van de functie. Het virtuele trefwoord vertelt de compiler om late binding of dynamische koppeling op de functie uit te voeren.

De enkele aanwijzer is vereist om te verwijzen naar alle objecten van verschillende klassen. Daarom wordt de aanwijzer op de superklasse gemaakt om naar alle objecten van de afgeleide klasse te verwijzen en bevat de superklasse-aanwijzer het adres van het object van de afgeleide klasse die altijd de superklassefunctie uitvoert. Om dit op te lossen, gebruiken we de virtuele functie. Dus, wanneer de virtuele functie in de superklasse wordt gemaakt, identificeert de C ++ compiler welke functie tijdens de uitvoering moet worden uitgevoerd en de identificatie van de functie neemt op basis van het type object dat de superklasse-aanwijzer aangeeft.

Virtuele functie

De virtuele functies van de syntaxis worden hieronder gegeven:

Syntaxis

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

Net als in de syntaxis verklaart fun () met het virtuele trefwoord, wat betekent dat de onderliggende klasse dezelfde methoden opnieuw kan definiëren.

Programma 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
)

Output:

In het bovenstaande programma wordt de superklasse A met de functie disp (), die herschreven wordt in de afgeleide klasse B. In de hoofdfunctie roept de methode disp () het object obj1 aan (een dynamische binding of late binding. Dynamische binding) is een proces waarin wordt bepaald welke specifieke functie wordt uitgevoerd tijdens de uitvoering) en de functie disp () van klasse A wordt uitgevoerd.

Programma 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
)

Output:

De bovenstaande programmacode is de wijziging van programma 1, de functie disp () wordt gedefinieerd met het trefwoord virtual en nu wanneer de obj1 de functie disp () aanroept, wordt de functie disp () van de onderliggende klasse B uitgevoerd.

Programma 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
)

Output:

De bovenstaande programmacode is de wijziging van programma 2, de functie disp () die ook opnieuw wordt gedefinieerd met het sleutelwoord virtual in klasse B en nu wanneer de obj1 de functie disp () aanroept, de functie disp () van de kindklasse B is geëxecuteerd.

Vervolgens schrijven we het programma voor de pure virtuele functie. De pure virtuele functie is een functie waarvoor don geen implementaties had. De pure virtuele functie wordt ook een abstracte virtuele functie genoemd. De pure virtuele functieverklaring kent 0 toe, zoals weergegeven in de onderstaande code -

Programma 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
)

Output:

Voordelen van virtueel trefwoord in C ++

  • Virtuele functies worden gebruikt om runtime polymorfisme te bereiken.
  • Als een klasse is afgeleid van een klasse met een virtuele functie, kan de functiedefinitie opnieuw worden gedefinieerd in de afgeleide klasse.

Regels van virtueel trefwoord in C ++

  • Het virtuele sleutelwoord in C ++ gebruikt in de functieverklaring.
  • Virtuele functies moeten lid zijn van de klas.
  • De virtuele functie toegankelijk via objectaanwijzers.
  • De virtuele functie kan niet statisch worden verklaard.
  • De virtuele functie kan vrienden uit een andere klas zijn.
  • Als de virtuele functie niet wordt gebruikt in de superklasse, kunnen we deze ook definiëren in de superklasse.
  • De handtekening van een virtuele functie van de superklasse en de onderliggende klassen moet hetzelfde zijn, de zogenaamde functie overschrijven, anders als de twee functies met dezelfde naam maar een andere handtekening, wordt het beschouwd als de overbelaste functies in C ++.
  • We kunnen een virtuele destructor hebben, maar geen virtuele constructor.

Conclusie

  • Een virtueel trefwoord in C ++ wordt gebruikt om een ​​virtuele functie in C ++ te maken.
  • De virtuele functie is de ouderklasse-functie die we opnieuw willen definiëren in de onderliggende klasse.
  • De enkele aanwijzer is vereist om te verwijzen naar alle objecten van verschillende klassen.
  • De superklasse-aanwijzer bevat het adres van het object van de afgeleide klasse die altijd de superklasse-functie uitvoert.
  • De virtuele functies moeten lid zijn van de klas, moeten lid zijn van de klas, mogen niet als statisch worden aangegeven en zijn toegankelijk via objectaanwijzers.
  • De handtekening van een virtuele functie van de superklasse en de onderliggende klassen moet hetzelfde zijn, de zogenaamde functie overschrijven, anders als de twee functies met dezelfde naam maar een andere handtekening, wordt het beschouwd als de overbelaste functies in C ++.

Aanbevolen artikelen

Dit is een gids voor het virtuele sleutelwoord in C ++. Hier bespreken we de introductie en de voordelen van het virtuele sleutelwoord in C ++ samen met de syntaxis van de virtuele functie. U kunt ook onze andere voorgestelde artikelen doornemen voor meer informatie -

  1. Methode overschrijven in C #
  2. Overerving in C #
  3. C # Commando's
  4. Java-opdrachten
  5. Overschrijven in Java
  6. Polymorfisme op Java
  7. Top 11 kenmerken en voordelen van C ++