Diferença entre a função virtual virtual e pura
Contente
- Gráfico de comparação
- Definição da Função Virtual
- Declaração:
- Herança multinível
- Definição da função virtual pura
- Classe abstrata
- Conclusão:
A função virtual e a função virtual pura são os conceitos de polimorfismo em tempo de execução. A principal diferença entre ‘função virtual " e 'Função virtual pura' é que 'função virtual' tem sua definição na classe base e também as classes derivadas herdadas a redefinem. A função virtual pura não tem definição na classe base, e todas as classes derivadas herdadas precisam redefini-la.
No entanto, a função virtual também é chamada de despacho dinâmico e despacho em tempo de execução, devido à função chamada ser especificada no tempo de execução, de acordo com o tipo de objeto usado.
O polimorfismo é suportado pelas linguagens C ++ e Java. Em Java, o termo "substituição" é usado em vez de "função virtual", pois a função virtual é o termo de C ++.
- Gráfico de comparação
- Definição
- Principais diferenças
- Conclusão
Gráfico de comparação
Base para Comparação | Função Virtual | Função Virtual Pura |
---|---|---|
Basic | Função virtual tem sua definição na classe base. | A Função Virtual Pura não tem definição na classe base. |
Declaração | nome da função virtual (lista de parâmetros) {. . . . .}; | nome_da_tabela virtual (lista de parâmetros) = 0; |
Classe derivada | Todas as classes derivadas podem ou não substituir a função virtual da classe base. | Todas as classes derivadas devem substituir a função virtual da classe base. |
Efeito | As funções virtuais são de natureza hierárquica; isso não afeta a compilação se alguma classe derivada não substituir a função virtual da classe base. | Se todas as classes derivadas falharem em substituir a função virtual da classe base, ocorrerá o erro de compilação. |
Classe abstrata | Nenhum conceito. | Se uma classe contiver pelo menos uma função virtual pura, ela será declarada abstrata. |
Definição da Função Virtual
o função virtual é a função de membro da classe base e é redefinida pelas classes derivadas que herdam a classe base. Não é necessário que todas as classes derivadas herdadas redefinam a função virtual, ela é redefinida apenas pelas classes derivadas que podem exigir seu funcionamento. Uma função virtual é criada pela declaração da função na classe base precedida pela palavra-chave 'virtual'.
Declaração:
base de classe {public: tipo virtual funt_name (lista de parâmetros) {. . . }};
As classes derivadas herdadas podem redefinir a função virtual sem nenhuma palavra-chave "virtual". Classes derivadas redefinem a função virtual para realizar sua tarefa. Como a função virtual é redefinida nas classes derivadas, temos várias formas da mesma função. Agora, qual versão da função está sendo chamada, depende de que tipo de objeto é chamado para invocar essa função.
Herança multinível
Na herança multinível, onde uma classe derivada que herdou a função virtual de sua classe base, quando ela é usada como classe base para outra classe derivada, a função virtual ainda pode ser substituída. Portanto, quando uma função virtual é herdada, sua natureza virtual também é herdada.
As funções virtuais também são de natureza hierárquica, ou seja, se uma classe derivada não substituir / redefinir a função virtual herdada da classe base e quando o objeto da classe derivada invocar essa função virtual, a função virtual definida pela classe base será invocada.
Definição da função virtual pura
Como visto acima, se a classe derivada não substituir a função virtual, a função virtual definida pela classe base é usada. Mas e se a própria classe base não definir a função virtual. Muitas vezes, a classe base não tem definição para a função virtual ou, às vezes, você deseja que todas as classes derivadas substituam a função virtual.
Para lidar com essas duas situações acima, o C ++ suporta o conceito de "Função Virtual Pura". Uma 'função virtual pura' é declarada na classe base, mas não tem sua definição na classe base. A função virtual pura é declarada da seguinte maneira.
tipo virtual nome_tabela (lista_parâmetro) = 0;
Sempre que uma função virtual na classe base é tornada "pura", cada classe derivada deve substituir obrigatoriamente a função virtual pura da classe base. Se a classe derivada falhar em substituir a função virtual pura da classe base, isso resultará em erro de compilação.
Classe abstrata
A classe que contém pelo menos uma função pura é chamada 'classe abstrata'. Nenhum objeto de classes abstratas pode ser criado, mas você pode criar referências e ponteiros para as classes abstratas. Os membros das classes abstratas podem ser acessados através do objeto das classes derivadas que herda a classe base abstrata.
Uma classe que você deseja declarar abstrata, use a palavra-chave 'abstrato' na frente do 'classe' palavra-chave
// por exemplo, classe abstrata class-name {. . tipo virtual nome_tabela (lista_parâmetro) = 0; . . };
- As funções virtuais são definitivamente definidas na classe base e redefinidas (substituição) na classe derivada. Por outro lado, função virtual pura, a classe base não é definida principalmente na classe base
- Classe derivada, se necessário, redefina (substitua) a função virtual, enquanto que, no caso de função virtual pura, a classe derivada precisa redefinir definitivamente a função virtual pura.
- Se a classe derivada falhar em redefinir (substituir) a função virtual, ela poderá usar a função virtual da classe base. Por outro lado, se uma classe derivada falhar em substituir a função virtual pura, ocorrerá um erro de compilação.
- A classe base que contém a função virtual pode ser instanciada, ou seja, seu objeto pode ser criado. Por outro lado, a classe base que contém a função virtual pura, isto é, uma classe abstrata não pode ser instanciada, pois uma classe abstrata não está totalmente definida.
Nota:
O protótipo da 'função virtual' e 'função virtual pura' permanece o mesmo durante todo o programa.
Conclusão:
As 'funções virtuais' e 'função virtual pura' têm sua importância, pois em 'funções virtuais', todas as classes derivadas não precisam redefinir a função virtual e onde queremos que todas as classes derivadas redefinam a função virtual, virtual pura a função se aplica melhor lá.