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 da 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-membro, i.e., exibição(). 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, em tais casos, C ++ fornece uma maneira de chamar a função da classe derivada, declarando a função da classe base como virtual. Veremos outro exemplo para entender isso.
#incluirusando namespace std;
classe Base_Class
público:
void display ()
cout << "I am in Base class" << endl;
;
class Derived_Class: public Base_Class
público:
void display ()
cout << "I am in Derived class"
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 uma classe derivada", o que indica que a função da 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.
#incluirusando namespace std;
classe Base_Class
público:
display vazio virtual ()
cout << "I am in Base class" << endl;
;
class Derived_Class: public Base_Class
público:
void display ()
cout << "I am in Derived class"
Exemplo 3
Este é outro exemplo de função virtual. Como você pode ver no programa abaixo, definimos uma classe base, i.e., Animal. Existem duas classes derivadas: Cachorro e Vaca. Definimos a função eat () como virtual na classe base, i.e., Animal. Em seguida, redefinimos a função eat () em ambas as classes derivadas, Cachorro e Vaca. Na função main (), temos um ponteiro da classe base, i.e., Animal e, em seguida, anexou a classe derivada, Dog. Portanto, quando chamamos a função eat () usando o ponteiro da classe base, podemos invocar a versão da classe derivada da função eat (), i.e., a função eat () da classe Dog. Da mesma forma, quando anexamos o objeto da classe Cow, podemos invocar a versão da classe derivada da função eat (), i.e., a função eat () da classe Cow. Você pode ver claramente esse comportamento na saída abaixo.
#incluirusando namespace std;
classe animal
público:
virtual void eat ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
classe Dog: public Animal
público:
void eat ()
cout << "Dog - eat non-veg!" << endl;
;
classe Cow: public Animal
público:
void eat ()
cout << "Cow - eat veg!"
a_ptr-> comer ();
return 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 runtime / dinâmico. Neste artigo, vimos apenas o conceito de função virtual e como obter polimorfismo de tempo de execução. Eu expliquei três exemplos de trabalho para explicar a função virtual.