C ++ virtuaalse märksõna sissejuhatus

C ++ virtuaalset märksõna kasutatakse virtuaalse funktsiooni loomiseks C ++. Virtuaalne funktsioon on vanemklassi funktsioon, mida me tahame lasteklassis uuesti määratleda. Virtuaalne funktsioon deklareeritakse märksõna virtuaalse abil. Virtuaalse funktsiooni määratlemisel tuleb funktsiooni deklareerimisel jätkata märksõna virtuaalne. Virtuaalne märksõna käsib kompilaatoril funktsiooni hilise sidumise või dünaamilise linkimise teostada.

Üksik kursor peab viitama kõigile erinevate klasside objektidele. Seetõttu luuakse superklassi osuti kõigile tuletatud klassi objektidele viitamiseks ja seejärel sisaldab superklassi osuti tuletatud klassi objekti aadressi ja käitab alati superklassi funktsiooni. Niisiis, selle lahendamiseks kasutame virtuaalset funktsiooni. Niisiis, kui virtuaalfunktsioon luuakse superklassis, tuvastab C ++ kompilaator, millist funktsiooni täitmise ajal teostada, ja funktsiooni identifitseerimine põhineb selle objekti tüübil, millele superklassi osuti osutab.

Virtuaalne funktsioon

Süntaksi virtuaalsed funktsioonid on toodud allpool:

Süntaks

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

Nagu süntaksis, deklareerib fun () virtuaalse märksõna abil, mis tähendab, et lasteklass saab samu meetodeid uuesti määratleda.

1. programm:

#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äljund:

Ülaltoodud programmi puhul on superklass A, millel on funktsioon disp (), mis kirjutatakse ümber tuletatud klassis B. Põhifunktsioonis kutsub displa () meetod üles obj1 objekti kutsumise (see on dünaamiline sidumine või hiline sidumine. Dünaamiline sidumine) on protsess, mille käigus valitakse konkreetne funktsioon, mille täitmiseks otsustatakse tööaeg) ja klassi A (Disp) funktsioon.

2. programm:

#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äljund:

Ülaltoodud programmikood on programmi 1 muutmine, funktsioon displa () on määratletud märksõnaga virtuaalne ja nüüd, kui obj1 kutsub funktsiooni disc (), täidetakse lasteklassi B funktsioon disp ().

3. programm:

#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äljund:

Ülaltoodud programmikood on programmi 2 muutmine, funktsioon displa (), mis on uuesti määratletud ka märksõnaga virtuaalne B-klassis ja nüüd, kui obj1 kutsub funktsiooni DISP (), siis DIS () funktsiooni lasteklassi B hukatakse.

Järgmisena kirjutame puhta virtuaalse funktsiooni programmi. Puhas virtuaalne funktsioon on funktsioon, mille jaoks donil puudusid rakendused. Puhta virtuaalset funktsiooni nimetatakse ka abstraktseks virtuaalseks funktsiooniks. Puhta virtuaalse funktsiooni deklaratsioon annab 0, nagu on näidatud allolevas koodis -

4. programm:

#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äljund:

Virtuaalse märksõna eelised rakenduses C ++

  • Kestuspolümorfismi saavutamiseks kasutatakse virtuaalseid funktsioone.
  • Kui klass tuletatakse virtuaalset funktsiooni omavast klassist, saab funktsiooni määratluse tuletatud klassis uuesti määratleda.

C ++ virtuaalse märksõna reeglid

  • C ++ virtuaalne märksõna kasutab funktsiooni deklaratsioonis.
  • Virtuaalsed funktsioonid peavad olema klassi liikmed.
  • Objekti viitade kaudu juurdepääsetav virtuaalne funktsioon.
  • Virtuaalset funktsiooni ei saa staatiliseks kuulutada.
  • Virtuaalne funktsioon võib olla mõne teise klassi sõber.
  • Kui virtuaalfunktsiooni superklassis ei kasutata, siis saame selle ka superklassis määratleda.
  • Superklassi ja lasteklasside virtuaalse funktsiooni allkiri peaks olema sama, nn funktsiooni ülimuslik, vastasel juhul, kui kaks funktsiooni on sama nimega, kuid erineva allkirjaga, loetakse seda C ++-is ülekoormatud funktsioonideks.
  • Meil võib olla virtuaalne hävitaja, kuid mitte virtuaalset konstruktorit.

Järeldus

  • C ++ virtuaalset märksõna kasutatakse virtuaalse funktsiooni loomiseks C ++.
  • Virtuaalne funktsioon on vanemklassi funktsioon, mida me tahame lasteklassis uuesti määratleda.
  • Üksik kursor peab viitama kõigile erinevate klasside objektidele.
  • Üleklassi osuti sisaldab tuletatud klassi objekti aadressi ja käivitab alati superklassi funktsiooni.
  • Virtuaalsed funktsioonid peavad olema klassi liikmed, peavad olema klassi liikmed, neid ei saa staatilisteks kuulutada, millele pääseb juurde objekti viidete kaudu.
  • Üleklassi ja lasteklasside virtuaalse funktsiooni allkiri peaks olema sama, nn funktsiooni ülimuslik, vastasel juhul, kui kaks funktsiooni on sama nimega, kuid erineva allkirjaga, loetakse seda C ++ ülekoormatud funktsioonideks.

Soovitatavad artiklid

See on juhend virtuaalse märksõna jaoks C ++. Siin käsitleme C ++ virtuaalse märksõna sissejuhatust ja eeliseid koos selle virtuaalse funktsiooni süntaksiga. Lisateavet leiate ka meie muudest soovitatud artiklitest -

  1. Meetodi ülimuslik C #
  2. Pärand C # -s
  3. C # käsud
  4. Java käsud
  5. Ülekaalus Java
  6. Polümorfism Java-s
  7. C ++ 11 peamist funktsiooni ja eelist

Kategooria: