Diferença entre a função virtual virtual e pura

Autor: Laura McKinney
Data De Criação: 2 Abril 2021
Data De Atualização: 10 Poderia 2024
Anonim
Diferença entre a função virtual virtual e pura - Tecnologia
Diferença entre a função virtual virtual e pura - Tecnologia

Contente


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 ++.


  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

Gráfico de comparação

Base para ComparaçãoFunção VirtualFunção Virtual Pura
BasicFunção virtual tem sua definição na classe base.A Função Virtual Pura não tem definição na classe base.
Declaraçãonome da função virtual (lista de parâmetros) {. . . . .};nome_da_tabela virtual (lista de parâmetros) = 0;
Classe derivadaTodas 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 abstrataNenhum 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; . . };

  1. 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
  2. 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.
  3. 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.
  4. 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á.