quarta-feira, 22 de maio de 2013

C++ - Utilizando métodos virtuais

Olá pessoal, nesse post iremos falar um pouco sobre métodos virtuais.

Método virtual é um método cujo comportamento pode ser sobrescrito em uma classe herdeira por uma função com a mesma assinatura.

O que acontece é que se eu tenho uma classe Derivada e essa classe contém um método virtual com a mesma assinatura do método virtual da classe Base, então o método em questão da classe Base será sobrescrito.

Com isso, o programador pode declarar funções na classe Base que podem ser redefinidas na classe Derivada.

A implementação do método virtual na classe Derivada é opcional quando implementamos o método virtual na classe Base. Se o método virtual existir na classe Derivada, então ele será executado. Caso não exista, então o método virtual da classe Base é que será executado.

Veja um exemplo para ficar mais claro:


Veja que eu tenho duas classes, uma chamada Base e outra chamada Derivada. A clase Derivada herda a classe Base.

As duas classes posuem métodos virtuais com a mesma assinatura. O método virtual da classe Base foi implementado, ele imprime a mensagem: "Classe Base". Por causa que ele foi implementado, então a sua implementação torna-se opcional pela classe Derivada.

Na linha 16 temos que a classe Derivada herda a classe Base. A classe Derivada possui um método com a mesma assinatura do método da classe Base, só que o método da classe Derivada imprime a mensagem "Classe Derivada".

Na linha 27 temos a declaração de um ponteiro do tipo Base.

Na linha 28 temos a declaração de uma variável do tipo Derivada.

Na linha 29 o ponteiro do tipo Base aponta para o endereço da variável "derivada".

Na linha 30, chamamos a função mensagem() através do ponteiro "pt_base".

Qual método será chamado? O método mensagem() da classe Base ou o método mensagem() da classe Derivada? Caso você execute o código acima, verá que será impressa a mensagem "Classe Derivada", então podemos concluir que o método mensagem() da classe Base foi sobrescrito pelo método mensagem() da classe Derivada.

Se a classe Derivada não tivesse o método mensagem(), então o método mensagem() da classe Base não seria sobrescrito e, portanto, seria impressa a mensagem "Classe Base".

Clique aqui para fazer o download do código

Quaisquer dúvidas deixem nos comentários, até a próxima!


Nenhum comentário: