Bevezetés a virtuális kulcsszóba a C ++ nyelven

A C ++ virtuális kulcsszója virtuális függvény létrehozására szolgál a C ++ kategóriában. A virtuális függvény a szülő osztály funkciója, amelyet újra akarunk definiálni a gyermek osztályban. A virtuális függvényt a virtuális kulcsszó használatával deklaráljuk. A virtuális függvény meghatározásakor a virtuális kulcsszónak a függvény deklarálásában kell folytatódnia. A virtuális kulcsszó azt mondja a fordítónak, hogy késlelteti a kötés vagy a dinamikus kapcsolat összekapcsolását a függvényen.

Az egyetlen mutatónak a különféle osztályok összes objektumára való hivatkozásra van szükség. Ezért a mutatót a szuperosztályon hozzuk létre, hogy utaljunk a származtatott osztály összes objektumára, majd a szuperosztály mutató tartalmazza a származtatott osztály objektumának címét, és mindig futtassa a szuperosztály funkciót. Tehát ennek megoldására a virtuális függvényt használjuk. Tehát, amikor a virtuális függvényt létrehozzák a szuperosztályban, akkor a C ++ fordító azonosítja, hogy melyik funkciót kell futtatni futási időben, és a függvény azonosítása az objektum típusa alapján történik, amelyre a szuperosztály mutató mutat.

Virtuális funkció

A szintaxis virtuális funkcióit az alábbiakban adjuk meg:

Szintaxis

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

Mint a szintaxisban, a fun () a virtuális kulcsszóval deklarálja, ami azt jelenti, hogy a gyermekosztály ugyanazokat a módszereket újradefiniálhatja.

1. program:

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

Kimenet:

A fenti programban az ats () funkcióval rendelkező A szuperosztály, amely a származtatott B osztályban kerül újraírásra. A fő funkcióban a displa () módszer az obj1 objektum hívására hívja fel a figyelmet (amely egy dinamikus kötés vagy késői kötés. Dinamikus kötés) egy olyan folyamat, amelyben a végrehajtandó konkrét függvényt a futási időn belül döntjük) és az A osztály DISP () függvényét hajtjuk végre.

2. program:

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

Kimenet:

A fenti programkód az 1 program módosítása, a disp () függvényt a virtuális kulcsszó határozza meg, és amikor az obj1 a DISP () funkciót hívja, a B (gyermek) osztály displa () funkcióját végrehajtják.

3. program:

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

Kimenet:

A fenti programkód a 2. program megváltoztatása, a disp () függvény, amely szintén újradefiniálódik a virtuális kulcsszóval a B osztályban, és most, amikor az obj1 meghívja a DISP () funkciót, a DIS () függvény a B gyermekosztályhoz végrehajtják.

Ezután megírjuk a programot a tiszta virtuális függvényhez. A tiszta virtuális függvény olyan funkció, amelyre a donnak nem volt implementációja. A tiszta virtuális függvényt elvont virtuális funkciónak is nevezik. A tiszta virtuális függvény deklaráció 0-t ad hozzá, az alábbi kód szerint -

4. program:

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

Kimenet:

A virtuális kulcsszó előnyei a C ++-ban

  • Virtuális függvények használják a futásidejű polimorfizmus elérését.
  • Ha egy osztály egy olyan virtuális funkcióval rendelkező osztályból származik, akkor a függvénydefiníció újradefiniálható a származtatott osztályban.

A virtuális kulcsszó szabályai a C ++ nyelven

  • A virtuális kulcsszó a C ++-ban használja a funkció deklarációjában.
  • A virtuális függvényeknek osztálynak kell lenniük.
  • Az objektummutatókon keresztül elérhető virtuális funkció.
  • A virtuális függvény nem statikus.
  • A virtuális függvény egy másik osztály barátai lehetnek.
  • Ha a virtuális függvényt nem használjuk a szuperosztályban, akkor azt is meghatározhatjuk a szuperosztályban.
  • A szuperosztály és a gyermekosztály virtuális függvényének aláírásának azonosnak kell lennie, úgynevezett funkció felülírásaként, egyébként, ha a két azonos névvel rendelkező, de eltérő aláírású funkciót a C ++ túlterhelt függvényének kell tekinteni.
  • Van virtuális rombolónk, de nincs virtuális kivitelezőnk.

Következtetés

  • A C ++ virtuális kulcsszója virtuális függvény létrehozására szolgál a C ++ kategóriában.
  • A virtuális függvény a szülő osztály funkciója, amelyet újra akarunk definiálni a gyermek osztályban.
  • Az egyetlen mutatónak a különféle osztályok összes objektumára való hivatkozásra van szükség.
  • A szuperosztályú mutató tartalmazza a származtatott osztály objektumának címét. Mindig futtassa a szuperosztályt.
  • A virtuális funkcióknak osztály tagoknak kell lenniük, osztály tagoknak, nem deklarálhatók statikusként, objektummutatók segítségével érhetők el.
  • A szuperosztály és a gyermekosztályok virtuális függvényének aláírásának azonosnak kell lennie, úgynevezett függvény-felülírónak, máskülönben, ha a két azonos névvel ellátott, de eltérő aláírású funkciót a C ++ túlterhelt függvényének kell tekinteni.

Ajánlott cikkek

Ez egy útmutató a C ++ virtuális kulcsszójához. Itt tárgyaljuk a C ++ virtuális kulcsszó bevezetését és előnyeit, valamint a virtuális függvény szintaxisát. A további javasolt cikkeken keresztül további információkat is megtudhat -

  1. Módszer felülbíráló C #
  2. Öröklés a C # -ben
  3. C # parancsok
  4. Java parancsok
  5. A Java alapon érvényes
  6. Polimorfizmus a Java-ban
  7. A C ++ 11 legfontosabb tulajdonságai és előnyei

Kategória: