Introdução à palavra-chave virtual em C ++

Uma palavra-chave virtual em C ++ é usada para criar uma função virtual em C ++. A função virtual é a função de classe pai que queremos redefinir na classe filho. A função virtual é declarada usando a palavra-chave virtual. Quando definimos a função virtual, a palavra-chave virtual deve prosseguir na declaração da função. A palavra-chave virtual informa ao compilador para executar ligação tardia ou ligação dinâmica na função.

O ponteiro único é necessário para se referir a todos os objetos de diferentes classes. Portanto, o ponteiro é criado na superclasse para referenciar todos os objetos da classe derivada e, em seguida, o ponteiro da superclasse contém o endereço do objeto da classe derivada sempre executa a função da superclasse. Portanto, para resolver isso, usamos a função virtual. Portanto, quando a função virtual é criada na superclasse, o compilador C ++ identifica qual função deve ser executada em tempo de execução e a identificação da função é baseada no tipo de objeto apontado pelo ponteiro da superclasse.

Função Virtual

As funções virtuais da sintaxe são fornecidas abaixo:

Sintaxe

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

Como na sintaxe, o fun () declara pela palavra-chave virtual, o que significa que a classe filho pode redefinir os mesmos métodos.

Programa 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
)

Resultado:

No programa acima, a superclasse A com a função disp (), que é reescrita na classe derivada B. Na função principal, o método disp () está chamando o objeto obj1 (que é uma ligação dinâmica ou uma ligação tardia). é um processo no qual a função específica a ser executada é decidida no tempo de execução) e a função disp () da classe A é executada.

Programa 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
)

Resultado:

O código do programa acima é a alteração do programa 1, a função disp () é definida com a palavra-chave virtual e agora quando o obj1 chamando a função disp (), a função disp () da classe filho B é executada.

Programa 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
)

Resultado:

O código do programa acima é a alteração do programa 2, a função disp () que também está redefinindo com a palavra-chave virtual na classe B e agora quando o obj1 chama a função disp (), a função disp () da classe filho B É executado.

Em seguida, escrevemos o programa para a função virtual pura. A função virtual pura é uma função para a qual não há implementações. A função virtual pura também chamada de função virtual abstrata. A declaração pura da função virtual atribui 0, conforme mostrado no código abaixo -

Programa 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
)

Resultado:

Vantagens da palavra-chave virtual em C ++

  • Funções virtuais são usadas para obter polimorfismo de tempo de execução.
  • Se uma classe é derivada de uma classe com uma função virtual, a definição da função pode ser redefinida na classe derivada.

Regras da palavra-chave virtual em C ++

  • A palavra-chave Virtual em C ++ usa na declaração da função.
  • As funções virtuais devem ser membros da classe.
  • A função virtual acessada através de ponteiros de objeto.
  • A função virtual não pode ser declarada como estática.
  • A função virtual pode ser amiga de outra classe.
  • Se a função virtual não é usada na superclasse, também podemos defini-la na superclasse.
  • A assinatura de uma função virtual da superclasse e das classes filho deve ser a mesma, chamada substituição de função; caso contrário, se as duas funções com o mesmo nome, mas com assinatura diferente, serão consideradas as funções sobrecarregadas em C ++.
  • Podemos ter um destruidor virtual, mas não um construtor virtual.

Conclusão

  • Uma palavra-chave virtual em C ++ é usada para criar uma função virtual em C ++.
  • A função virtual é a função de classe pai que queremos redefinir na classe filho.
  • O ponteiro único é necessário para se referir a todos os objetos de diferentes classes.
  • O ponteiro da superclasse contém o endereço do objeto da classe derivada sempre executa a função da superclasse.
  • As funções virtuais devem ser membros da classe, devem ser membros da classe, não podem ser declaradas como estáticas, acessadas por meio de ponteiros de objeto.
  • A assinatura de uma função virtual da superclasse e das classes filho deve ser a mesma, chamada substituição de função; caso contrário, se as duas funções com o mesmo nome, mas com assinatura diferente, serão consideradas as funções sobrecarregadas em C ++.

Artigos recomendados

Este é um guia para a palavra-chave Virtual em C ++. Aqui discutimos a introdução e as vantagens da palavra-chave virtual em C ++, juntamente com sua sintaxe da função virtual. Você também pode consultar nossos outros artigos sugeridos para saber mais -

  1. Substituição de método em C #
  2. Herança em C #
  3. Comandos C #
  4. Comandos Java
  5. Substituindo em Java
  6. Polimorfismo em Java
  7. Os 11 principais recursos e vantagens do C ++