Úvod do virtuálního klíčového slova v C ++

Virtuální klíčové slovo v C ++ se používá k vytvoření virtuální funkce v C ++. Virtuální funkce je funkce nadřazené třídy, kterou chceme znovu definovat v podřízené třídě. Virtuální funkce je deklarována pomocí klíčového slova virtual. Když definujeme virtuální funkci, klíčové slovo virtuální má postupovat v deklaraci funkce. Virtuální klíčové slovo říká kompilátoru, aby na funkci provedl pozdní vazbu nebo dynamické propojení.

Jediný ukazatel je vyžadován pro odkaz na všechny objekty různých tříd. Ukazatel je proto vytvořen v nadřazené třídě, aby odkazoval na všechny objekty odvozené třídy, a potom ukazatel nadřazené třídy obsahuje adresu objektu odvozené třídy vždy spouští funkci nadřazené třídy. K vyřešení tohoto problému používáme virtuální funkci. Když je tedy v nadřazené třídě vytvořena virtuální funkce, pak kompilátor C ++ identifikuje, která funkce má být spuštěna za běhu, a identifikace funkce se odvíjí od typu objektu, který ukazuje ukazatel nadřazené ukazatele.

Virtuální funkce

Virtuální funkce syntaxe jsou uvedeny níže:

Syntax

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

Stejně jako v syntaxi deklaruje fun () virtuální klíčové slovo, což znamená, že podřízená třída může předefinovat stejné metody.

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
)

Výstup:

Ve výše uvedeném programu nadřazená třída A má funkci disp (), která je přepsána v odvozené třídě B. V hlavní funkci metoda dis () volá objekt obj1 (což je dynamická vazba nebo pozdní vazba. Dynamická vazba je proces, ve kterém, která konkrétní funkce, která má být vykonána, je rozhodnuta v době běhu) a funkce disp () třídy A je vykonána.

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
)

Výstup:

Výše uvedený programový kód je změna programu 1, funkce disp () je definována klíčovým slovem virtual a nyní, když je obj1, který volá funkci disp (), je vykonána funkce disp () podřízené třídy 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
)

Výstup:

Výše uvedený programový kód je změna programu 2, funkce disp (), která také předefinuje klíčové slovo virtual ve třídě B a nyní, když obj1, který volá funkci disp (), funkce disp () podřízené třídy B je proveden.

Dále píšeme program pro čistě virtuální funkci. Čistě virtuální funkce je funkce, pro kterou neměli implementace. Čistá virtuální funkce se také nazývá abstraktní virtuální funkce. Čisté prohlášení o virtuální funkci přiřadí 0, jak je uvedeno v níže uvedeném kódu -

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
)

Výstup:

Výhody virtuálního klíčového slova v C ++

  • Virtuální funkce se používají k dosažení běhového polymorfismu.
  • Pokud je třída odvozena od třídy mající virtuální funkci, pak lze definici funkce v odvozené třídě znovu definovat.

Pravidla virtuálního klíčového slova v C ++

  • Virtuální klíčové slovo v C ++ používá v deklaraci funkce.
  • Virtuální funkce musí být členy třídy.
  • Virtuální funkce přístupná prostřednictvím ukazatelů objektů.
  • Virtuální funkce nemůže být deklarována jako statická.
  • Virtuální funkce mohou být přátelé z jiné třídy.
  • Pokud není virtuální funkce v nadřazené třídě použita, můžeme ji také definovat v nadřazené třídě.
  • Podpis virtuální funkce nadřazené třídy a podřízených tříd by měl být stejný, tzv. Funkce overriding, jinak, pokud se obě funkce se stejným názvem, ale odlišným podpisem, považují v C ++ za přetížené funkce.
  • Můžeme mít virtuální destruktor, ale nemůžeme mít virtuální konstruktor.

Závěr

  • Virtuální klíčové slovo v C ++ se používá k vytvoření virtuální funkce v C ++.
  • Virtuální funkce je funkce nadřazené třídy, kterou chceme znovu definovat v podřízené třídě.
  • Jediný ukazatel je vyžadován pro odkaz na všechny objekty různých tříd.
  • Ukazatel nadtřídy obsahuje adresu objektu odvozené třídy vždy spouštět funkci nadtřídy.
  • Virtuální funkce musí být členy třídy, musí být členy třídy, nemohou být deklarovány jako statické, přístupné prostřednictvím ukazatelů objektů.
  • Podpis virtuální funkce nadřazené třídy a podřízených tříd by měl být stejný, tzv. Funkce overriding, jinak, pokud se obě funkce se stejným názvem, ale odlišným podpisem, považují v C ++ za přetížené funkce.

Doporučené články

Toto je průvodce virtuálním klíčovým slovem v C ++. Zde diskutujeme Úvod a výhody virtuálního klíčového slova v C ++ spolu s jeho Syntaxí virtuální funkce. Další informace naleznete také v dalších navrhovaných článcích -

  1. Přepsání metody v C #
  2. Dědičnost v C #
  3. C # Příkazy
  4. Příkazy Java
  5. Převažující v Javě
  6. Polymorfismus v Javě
  7. Prvních 11 funkcí a výhod C ++

Kategorie: