Função virtual C ++

Função virtual C ++
Neste artigo, discutiremos a função virtual na linguagem de programação C ++. Uma função virtual é usada em C ++ para alcançar o polimorfismo de tempo de execução/dinâmico. Veremos vários exemplos para entender o conceito de função virtual em c++.

Uma função virtual é uma função de membro que é definida na classe base/classe pai e redefinida na classe derivada. A função virtual permite chamar a versão de classe derivada da função usando a referência ou ponteiro para a classe base.

Vamos ver alguns exemplos para entender o conceito de função virtual.

No primeiro exemplo, veremos o comportamento da função não virtual e, no segundo exemplo, explicaremos o comportamento de uma função virtual.

Exemplo 1

No código de exemplo a seguir, temos duas classes: classe base e classe derivada.

A classe base tem uma função de membro, eu.e., mostrar(). A classe derivada é herdada da classe base e redefinida a função Display ().

Em seguida, declaramos um ponteiro para o tipo de classe base e atribuímos um objeto da classe derivada. Então, quando chamamos a função Display () usando o ponteiro do tipo de classe base, a função da classe base será chamada. Você pode ver a saída abaixo.

Mas, nesses casos, o C ++ fornece uma maneira de chamar a função de classe derivada, declarando a função da classe base como virtual. Veremos outro exemplo para entender isso.

#incluir
usando namespace std;
classe base_class

público:
Void Display ()

cout << "I am in Base class" << endl;

;
Classe derivada_class: public base_class

público:
Void Display ()

cout << "I am in Derived class" retornar 0;

Exemplo 2

Neste exemplo, definimos a função Display () como uma função virtual na classe base. A única diferença em relação ao programa anterior é que adicionamos uma palavra -chave virtual na frente de "Void Display ()" na classe base.

Agora, se você vir a saída, ele imprime, "estou em classe derivada", o que indica que a função de classe derivada é chamada.

A palavra -chave virtual (função virtual) na classe base é responsável por garantir que a função correta seja chamada para um objeto.

#incluir
usando namespace std;
classe base_class

público:
Virtual Void Display ()

cout << "I am in Base class" << endl;

;
Classe derivada_class: public base_class

público:
Void Display ()

cout << "I am in Derived class" retornar 0;

Exemplo 3

Este é outro exemplo de uma função virtual. Como você pode ver no programa abaixo, definimos uma classe base, eu.e., Animal. Existem duas classes derivadas: cachorro e vaca. Definimos a função Eat () como virtual na classe base, eu.e., Animal. Então redefinimos a função Eat () nas classes derivadas, cachorro e vaca. Na função Main (), temos um ponteiro da classe base, eu.e., Animal, e depois anexou a classe derivada, cachorro. Então, quando chamamos a função Eat () usando o ponteiro da classe base, podemos invocar a versão de classe derivada de eat ().e., a função Eat () da aula de cães. Da mesma forma, quando anexamos o objeto da classe de vaca, podemos invocar a versão de classe derivada da função Eat (), i.e., a função Eat () da classe de vaca. Você pode ver claramente esse comportamento na saída abaixo.

#incluir
usando namespace std;
animal de classe

público:
Virtual Void Eat ()

cout << "Animal - base class - undefined eating behavior." << endl;

;
Cão de classe: animal público

público:
Void Eat ()

cout << "Dog - eat non-veg!" << endl;

;
Vaca de classe: animal público

público:
Void Eat ()

cout << "Cow - eat veg!" a_ptr = new Cow ();
A_PTR-> EAT ();
retornar 0;

Conclusão

Neste artigo, expliquei o conceito de função virtual em C++. O C ++ suporta diferentes tipos de polimorfismo - polimorfismo estático e polimorfismo dinâmico. Com a ajuda de uma função virtual, podemos alcançar o polimorfismo de tempo de execução/dinâmico. Neste artigo, apenas analisamos o conceito de função virtual e como alcançar o polimorfismo de tempo de execução. Eu expliquei três exemplos de trabalho para explicar a função virtual.