Увод у виртуелну кључну реч у Ц ++
Виртуелна кључна реч у Ц ++ користи се за креирање виртуелне функције у Ц ++. Виртуелна функција је функција родитељске класе коју желимо редефинисати у дечијој класи. Виртуелна функција се декларише помоћу кључне речи виртуална. Када дефинишемо виртуелну функцију, кључна реч виртуална треба да настави у декларацији функције. Виртуелна кључна реч каже компајлеру да изврши касно везивање или динамичку везу у функцији.
Један показивач је потребан да би се односио на све објекте различитих класа. Стога се поинтер креира на надкласи како би упутио све објекте изведене класе, а затим показивач надкласе садржи адресу објекта изведене класе и увијек покреће функцију суперкласа. Дакле, да бисмо то решили користимо виртуелну функцију. Дакле, када се виртуелна функција створи у надкласи, тада компајлер Ц ++ идентификује која функција треба да се изврши у време извођења и идентификација функције се заснива на типу објекта који показује показивач суперкласе.
Виртуелна функција
Виртуелне функције синтаксе су дате у наставку:
Синтакса
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
)
Излаз:
Предности виртуалне кључне речи у језику Ц ++
- Виртуелне функције се користе за постизање полиморфизма рада.
- Ако је класа изведена из класе која има виртуелну функцију, онда се дефиниција функције може редефинисати у изведеној класи.
Правила виртуалне кључне речи у језику Ц ++
- Виртуална кључна реч у Ц ++ користи се у декларацији функција.
- Виртуалне функције морају бити чланови класе.
- Виртуалној функцији приступа се кроз показиваче објеката.
- Виртуелна функција се не може декларирати као статична.
- Виртуална функција може бити пријатељ из друге класе.
- Ако се виртуална функција не користи у суперкласи, тада је можемо дефинирати и у суперкласи.
- Потпис виртуалне функције преткласа и дјечје класе требао би бити исти, такозвани као преклапање функција, иначе ако се двије функције с истим називом, али различитог потписа, сматрају се преоптерећеним функцијама у Ц ++.
- Можемо имати виртуалног деструктора, али не и виртуалног конструктора.
Закључак
- Виртуелна кључна реч у Ц ++ користи се за креирање виртуелне функције у Ц ++.
- Виртуелна функција је функција родитељске класе коју желимо редефинисати у дечијој класи.
- Један показивач је потребан да би се односио на све објекте различитих класа.
- Показивач суперкласе садржи адресу објекта изведене класе који увијек изводи функцију суперкласа.
- Виртуалне функције морају бити чланови класе, морају бити чланови класе, не могу се декларирати као статичне, којима се може приступити кроз показиваче објеката.
- Потпис виртуалне функције преткласа и дјечје класе требао би бити исти, такозвани као преклапање функција, иначе ако се двије функције с истим називом, али различитог потписа, сматрају се преоптерећеним функцијама у Ц ++.
Препоручени чланци
Ово је водич за виртуелну кључну реч у Ц ++. Овде смо расправљали о Уводу и предностима виртуелне кључне речи у језику Ц ++, заједно са синтаксом виртуелне функције. Можете и да прођете кроз друге наше предложене чланке да бисте сазнали више -
- Прегласавање метода у Ц #
- Наслеђивање у Ц #
- Ц # команде
- Јава команде
- Превладавање у Јави
- Полиморфизам у Јави
- Топ 11 функција и предности Ц ++