Въведение във виртуалната ключова дума в C ++

Виртуална ключова дума в C ++ се използва за създаване на виртуална функция в C ++. Виртуалната функция е функцията на родителския клас, която искаме да предефинираме в детския клас. Виртуалната функция се декларира с помощта на ключовата дума виртуална. Когато дефинираме виртуалната функция, ключовата дума виртуална ще продължи при декларирането на функцията. Виртуалната ключова дума казва на компилатора да извърши късно свързване или динамично свързване на функцията.

Единичният показалец е необходим за препращане към всички обекти от различни класове. Следователно показалецът се създава на свръхклас, за да се отнасят към всички обекти на производния клас и тогава показалецът на суперклас съдържа адреса на обекта на производен клас, винаги изпълнява функцията на суперклас. Така че, за да разрешим това, използваме виртуалната функция. Така че, когато виртуалната функция е създадена в свръхклас, тогава компилаторът C ++ идентифицира коя функция трябва да се изпълни по време на изпълнение и идентифицирането на функцията се базира на типа обект, който сочи показалеца на суперклас.

Виртуална функция

Виртуалните функции на синтаксиса са дадени по-долу:

Синтаксис

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

Както в синтаксиса, fun () декларира чрез виртуалната ключова дума, което означава, че класът на детето може да предефинира същите методи.

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

изход:

В горната програма суперкласът A, имащ функцията disp (), която се пренаписва в производен клас В. В основната функция методът disp () призовава обекта obj1 (което е динамично свързване или късно свързване. Динамично свързване е процес, при който конкретната функция за изпълнение се решава по време на изпълнение) и disp () функция от клас A се изпълнява.

Програма 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, функцията disp () се дефинира с ключовата дума виртуална и сега, когато obj1, извикваща функцията disp (), се изпълнява функцията disp () на дъщерния клас B.

Програма 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, функцията disp (), която също е предефинирана с ключовата дума виртуален в клас B и сега, когато obj1, извикваща функцията disp (), функцията disp () на дъщерния клас B се изпълнява.

След това пишем програмата за чистата виртуална функция. Чистата виртуална функция е функция, за която don не е имал реализации. Чистата виртуална функция също се нарича абстрактна виртуална функция. Чистата декларация за виртуална функция присвоява 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
)

изход:

Предимства на виртуалната ключова дума в C ++

  • Виртуалните функции се използват за постигане на полиморфизъм по време на работа.
  • Ако клас е производен от клас, който има виртуална функция, тогава дефиницията на функцията може да бъде предефинирана в производен клас.

Правила на виртуалната ключова дума в C ++

  • Виртуалната ключова дума в C ++ използва във функцията декларация.
  • Виртуалните функции трябва да са членове на класа.
  • Виртуалната функция, достъп до която се осъществява чрез указатели на обекти.
  • Виртуалната функция не може да бъде декларирана като статична.
  • Виртуалната функция може да бъде приятели от друг клас.
  • Ако виртуалната функция не се използва в суперклас, тогава също можем да я определим в суперкласа.
  • Подписът на виртуална функция на свръхклас и на класовете на деца трябва да е еднакъв, т. Нар. Като функция с преобладаване, иначе ако двете функции със същото име, но различен подпис, се счита за претоварени функции в C ++.
  • Можем да имаме виртуален деструктор, но не и виртуален конструктор.

заключение

  • Виртуална ключова дума в C ++ се използва за създаване на виртуална функция в C ++.
  • Виртуалната функция е функцията на родителския клас, която искаме да предефинираме в детския клас.
  • Единичният показалец е необходим за препращане към всички обекти от различни класове.
  • Показалецът на суперклас съдържа адреса на обекта от извлечения клас, винаги изпълнява функцията на суперклас.
  • Виртуалните функции трябва да са членове на класа, трябва да са членове на класа, не могат да бъдат декларирани като статични, достъпът им е чрез обекти.
  • Подписът на виртуална функция на свръхкласа и класовете на деца трябва да е една и съща, т. Нар. Като функция, която преобладава, в противен случай, ако двете функции със същото име, но различен подпис, се счита за претоварени функции в C ++.

Препоръчителни статии

Това е ръководство за виртуалната ключова дума в C ++. Тук обсъждаме Въведение и предимствата на виртуалната ключова дума в C ++, заедно със синтаксиса на виртуалната функция. Можете да разгледате и другите ни предложени статии, за да научите повече -

  1. Метод отменяне в C #
  2. Наследяване в C #
  3. C # Команди
  4. Java команди
  5. По-важно в Java
  6. Полиморфизъм в Java
  7. Топ 11 функции и предимства на C ++