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 -
- Módszer felülbíráló C #
- Öröklés a C # -ben
- C # parancsok
- Java parancsok
- A Java alapon érvényes
- Polimorfizmus a Java-ban
- A C ++ 11 legfontosabb tulajdonságai és előnyei