C++

C++ virtuele functie

C++ virtuele functie
In dit artikel gaan we de virtuele functie in de programmeertaal C++ bespreken. Een virtuele functie wordt gebruikt in C++ om het runtime/dynamische polymorfisme te bereiken. We zullen verschillende voorbeelden zien om het concept van de virtuele functie in C . te begrijpen++.

Een virtuele functie is een lidfunctie die is gedefinieerd in de basisklasse/bovenliggende klasse en opnieuw is gedefinieerd in de afgeleide klasse. Met de virtuele functie kan de afgeleide klasseversie van de functie worden aangeroepen met behulp van de verwijzing of aanwijzer naar de basisklasse.

Laten we een paar voorbeelden bekijken om het concept van virtuele functie te begrijpen.

In het eerste voorbeeld zullen we het gedrag van de niet-virtuele functie zien, en in het tweede voorbeeld zullen we het gedrag van een virtuele functie uitleggen.

voorbeeld 1

In de volgende voorbeeldcode hebben we twee klassen: basisklasse en afgeleide klasse.

Basisklasse heeft een ledenfunctie, i.e., Scherm(). De afgeleide klasse wordt geërfd van de basisklasse en de functie display() opnieuw gedefinieerd.

Vervolgens hebben we een aanwijzer naar het type basisklasse gedeclareerd en een object van de afgeleide klasse toegewezen. Dus als we de functie display() aanroepen met de aanwijzer van het basisklassetype, wordt de functie van de basisklasse aangeroepen. Je kunt de uitvoer hieronder zien:.

Maar in dergelijke gevallen biedt C++ een manier om de afgeleide klassefunctie aan te roepen door de basisklassefunctie als virtueel te declareren. We zullen nog een voorbeeld zien om dit te begrijpen.

#include
namespace std; gebruiken;
klasse Basis_Klasse

openbaar:
ongeldige weergave()

cout << "I am in Base class" << endl;

;
class Derived_Class:public Base_Class

openbaar:
ongeldige weergave()

cout << "I am in Derived class" retourneer 0;

Voorbeeld 2

In dit voorbeeld hebben we de functie display() gedefinieerd als een virtuele functie in de basisklasse. Het enige verschil met het vorige programma is dat we een virtueel trefwoord hebben toegevoegd voor "void display()" in de basisklasse.

Als u nu de uitvoer ziet, wordt afgedrukt: "Ik ben in afgeleide klasse", wat aangeeft dat de afgeleide klassefunctie wordt aangeroepen.

Het virtuele sleutelwoord (virtuele functie) in de basisklasse is verantwoordelijk om ervoor te zorgen dat de juiste functie wordt aangeroepen voor een object.

#include
namespace std; gebruiken;
klasse Basis_Klasse

openbaar:
virtuele leegte weergave()

cout << "I am in Base class" << endl;

;
class Derived_Class:public Base_Class

openbaar:
ongeldige weergave()

cout << "I am in Derived class" retourneer 0;

Voorbeeld 3

Dit is nog een voorbeeld van een virtuele functie. Zoals je in het onderstaande programma kunt zien, hebben we een basisklasse gedefinieerd, i.e., Dier. Er zijn twee afgeleide klassen: Hond en Koe. We hebben de functie eat() als virtueel gedefinieerd in de basisklasse, i.e., Dier. Vervolgens hebben we de functie eat() opnieuw gedefinieerd in zowel de afgeleide klassen Dog als Cow.  In de functie main() hebben we een aanwijzer van de basisklasse, i.e., Animal, en vervolgens de afgeleide klasse Dog . bijgevoegd. Dus als we de functie eat() aanroepen met behulp van de basisklasse-aanwijzer, kunnen we de afgeleide klasseversie van de functie eat() aanroepen, i.e., de functie eat() uit de klasse Dog. Evenzo, wanneer we het klasseobject Cow koppelen, kunnen we de afgeleide klasseversie van de eat()-functie aanroepen, i.e., de functie eat() uit de klasse Cow. Je kunt dit gedrag duidelijk zien in de onderstaande uitvoer. 

#include
namespace std; gebruiken;
klasse dier

openbaar:
virtuele leegte eat()

cout << "Animal - base class - undefined eating behavior." << endl;

;
klasse Hond:publiek dier

openbaar:
nietig eten()

cout << "Dog - eat non-veg!" << endl;

;
klasse Koe: openbaar dier

openbaar:
nietig eten()

cout << "Cow - eat veg!" a_ptr = nieuwe koe();
a_ptr->eat();
retourneer 0;

Conclusie

In dit artikel heb ik het concept van virtuele functie in C . uitgelegd++. De C++ ondersteunt verschillende soorten polymorfisme - statisch polymorfisme en dynamisch polymorfisme. Met behulp van een virtuele functie kunnen we het runtime/dynamische polymorfisme bereiken. In dit artikel hebben we alleen gekeken naar het concept van virtuele functie en hoe runtime-polymorfisme te bereiken. Ik heb drie werkvoorbeelden uitgelegd om de virtuele functie uit te leggen.

Top 10 spellen om te spelen op Ubuntu
Het Windows-platform is een van de dominante platforms voor gaming geweest vanwege het enorme percentage games dat tegenwoordig wordt ontwikkeld om Wi...
5 beste arcade-spellen voor Linux
Tegenwoordig zijn computers serieuze machines die worden gebruikt om te gamen. Als je de nieuwe hoge score niet kunt halen, weet je wat ik bedoel. In ...
Strijd om Wesnoth 1.13.6 Ontwikkeling vrijgegeven
Strijd om Wesnoth 1.13.6 die vorige maand werd uitgebracht, is de zesde ontwikkelingsrelease in de 1.13.x-serie en het levert een aantal verbeteringen...