O que é herança virtual?

A herança virtual é um tipo de herança na qual a implementação de uma superclasse é incompleta e uma subclasse é necessária para a definição completa de um objeto. Esse tipo de herança pode ser usado em conjunto com a herança única e múltipla, mas é mais comumente usada em herança múltipla. Qualquer classe que herda de uma classe base virtual se torna uma subclasse direta dessa classe base. Uma classe base virtual pode confiar em uma subclasse para implementar todos os seus métodos, mas esse não é um requisito.

C ++ é a linguagem de computador mais conhecida para usar a herança virtual. Para declarar herança virtual em C ++, a palavra -chave "virtual" é usada. A superclasse e a subclasse devem declarar métodos virtuais com a palavra -chave "virtual". Isso informa ao compilador C ++ que a superclasse está incompleta e deve obter informações da subclasse para concluí -las. Usar a subclasse para concluir a superclasse não significa que subclasse se substituem se tiverem oA mesma classe base e, em vez disso, o compilador C ++ cuida de determinar quais peças acompanham cada objeto.

Como uma classe base virtual é necessária para a herança virtual, as funções globais no C ++ não podem ser declaradas virtuais. Esse tipo de herança só pode ser usado ao aderir aos princípios de programação orientada a objetos (OOP). A razão para isso é que as funções globais não estão associadas a uma classe específica e, portanto, geralmente são independentes por conta própria. Sem uma herança de superclasse e subclasse não pode acontecer, portanto, funções globais e herança virtual são mutuamente exclusivas. As funções globais podem, em teoria, ser usadas dentro de funções virtuais, mas o inverso nem sempre funciona.

A herança virtual é usada para resolver muitos problemas de programação, e um dos mais úteis é a resolução da ambiguidade. Em herança múltipla, pode -se ter uma classe Base A que tenha duas subclasses, B eC e, em seguida, uma classe D que herda das duas classes B e C. Esse padrão é comumente chamado de "diamante da morte" porque, se as classes A, B e C têm implementações do mesmo método, não é possível para a classe D determinar qual implementação deve usar. A herança virtual resolve esse problema porque a implementação de cada classe permanece distinta e, portanto, inequívoca. Essa distinção é tratada por objetos internos especializados chamados Tabelas Virtuais (VTables) que acompanham cada tipo de objeto, mas essas tabelas não precisam ser explicitamente manipuladas por um programador porque estão embutidas na linguagem.

OUTRAS LÍNGUAS

Este artigo foi útil? Obrigado pelo feedback Obrigado pelo feedback

Como podemos ajudar? Como podemos ajudar?