Увод у виртуелну кључну реч у Ц ++

Виртуелна кључна реч у Ц ++ користи се за креирање виртуелне функције у Ц ++. Виртуелна функција је функција родитељске класе коју желимо редефинисати у дечијој класи. Виртуелна функција се декларише помоћу кључне речи виртуална. Када дефинишемо виртуелну функцију, кључна реч виртуална треба да настави у декларацији функције. Виртуелна кључна реч каже компајлеру да изврши касно везивање или динамичку везу у функцији.

Један показивач је потребан да би се односио на све објекте различитих класа. Стога се поинтер креира на надкласи како би упутио све објекте изведене класе, а затим показивач надкласе садржи адресу објекта изведене класе и увијек покреће функцију суперкласа. Дакле, да бисмо то решили користимо виртуелну функцију. Дакле, када се виртуелна функција створи у надкласи, тада компајлер Ц ++ идентификује која функција треба да се изврши у време извођења и идентификација функције се заснива на типу објекта који показује показивач суперкласе.

Виртуелна функција

Виртуелне функције синтаксе су дате у наставку:

Синтакса

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

Као и у синтакси, фун () декларише помоћу виртуелне кључне речи, што значи да дечија класа може редефинисати исте методе.

Програм 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
)

Излаз:

У горњем програму суперкласа А која има функцију дисп (), која се преписује у изведену класу Б. У главној функцији метода дисп () позива објект обј1 (који је динамичко везивање или касно везивање. Динамичко везивање је процес у коме се одређује одређена функција коју треба извршити у време покретања и извршава се дисп () функција класе А.

Програм 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
)

Излаз:

Горњи програмски код је измена програма 1, функција дисп () је дефинисана кључном речју виртуелна, а сада када се обј1 који зове функцију дисп (), извршава се функција дисп () дечије класе Б.

Програм 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
)

Излаз:

Горњи програмски код је измена програма 2, функције дисп () која је такође редефинисана кључном речју виртуелне у класи Б и сада када обј1 који зове функцију дисп (), функцију дисп () дечије класе Б се извршава.

Затим пишемо програм за чисту виртуалну функцију. Чиста виртуална функција је функција за коју дон није имао имплементације. Чиста виртуална функција назива се и апстрактна виртуална функција. Чиста декларација виртуалне функције додјељује 0, као што је приказано у доњем коду -

Програм 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
)

Излаз:

Предности виртуалне кључне речи у језику Ц ++

  • Виртуелне функције се користе за постизање полиморфизма рада.
  • Ако је класа изведена из класе која има виртуелну функцију, онда се дефиниција функције може редефинисати у изведеној класи.

Правила виртуалне кључне речи у језику Ц ++

  • Виртуална кључна реч у Ц ++ користи се у декларацији функција.
  • Виртуалне функције морају бити чланови класе.
  • Виртуалној функцији приступа се кроз показиваче објеката.
  • Виртуелна функција се не може декларирати као статична.
  • Виртуална функција може бити пријатељ из друге класе.
  • Ако се виртуална функција не користи у суперкласи, тада је можемо дефинирати и у суперкласи.
  • Потпис виртуалне функције преткласа и дјечје класе требао би бити исти, такозвани као преклапање функција, иначе ако се двије функције с истим називом, али различитог потписа, сматрају се преоптерећеним функцијама у Ц ++.
  • Можемо имати виртуалног деструктора, али не и виртуалног конструктора.

Закључак

  • Виртуелна кључна реч у Ц ++ користи се за креирање виртуелне функције у Ц ++.
  • Виртуелна функција је функција родитељске класе коју желимо редефинисати у дечијој класи.
  • Један показивач је потребан да би се односио на све објекте различитих класа.
  • Показивач суперкласе садржи адресу објекта изведене класе који увијек изводи функцију суперкласа.
  • Виртуалне функције морају бити чланови класе, морају бити чланови класе, не могу се декларирати као статичне, којима се може приступити кроз показиваче објеката.
  • Потпис виртуалне функције преткласа и дјечје класе требао би бити исти, такозвани као преклапање функција, иначе ако се двије функције с истим називом, али различитог потписа, сматрају се преоптерећеним функцијама у Ц ++.

Препоручени чланци

Ово је водич за виртуелну кључну реч у Ц ++. Овде смо расправљали о Уводу и предностима виртуелне кључне речи у језику Ц ++, заједно са синтаксом виртуелне функције. Можете и да прођете кроз друге наше предложене чланке да бисте сазнали више -

  1. Прегласавање метода у Ц #
  2. Наслеђивање у Ц #
  3. Ц # команде
  4. Јава команде
  5. Превладавање у Јави
  6. Полиморфизам у Јави
  7. Топ 11 функција и предности Ц ++

Категорија: