O que é uma classe virtual?
Uma classe virtual é uma classe que é alocada apenas uma vez na memória, de modo que os filhos dessa classe usem apenas a única cópia dessa classe pai, estabelecida na memória. Uma classe é um grupo de objetos que compartilham características ou atributos comuns. A virtualização de uma classe oferece às linguagens de programação orientadas a objetos a capacidade de usar herança múltipla quando classes pai de segunda ou mais gerações são derivadas de classes base ancestrais comuns. Dependendo da linguagem de programação do computador mencionada, a palavra-chave "virtual", palavra-chave semelhante ou sintaxe e semântica de uma classe são usadas para sugerir que uma determinada classe deve ser considerada virtual.
Nem todas as linguagens de programação orientadas a objetos permitem herança múltipla, ou seja, quando uma classe filho pode ser derivada de várias classes pai ao mesmo tempo. Em uma linguagem de programação como C ++, uma classe pode herdar todos os dados e funções de membro de ambas as classes pai de uma só vez e ter acesso aos dois conjuntos de dados e funções pai. Outras linguagens que suportam herança múltipla incluem Perl, Python, Tcl e Eiffel.
Ocorre um problema em várias hierarquias de herança quando duas ou mais classes pais usadas para criar uma classe filho são originalmente derivadas de apenas uma ou a mesma classe de avô. Isso é chamado de problema do diamante, o nome decorrente de como a hierarquia ficaria nessa situação. Quando um programa compilador tenta instanciar uma classe, como uma classe neta feita a partir de duas classes principais com um avô comum, duas cópias do avô são feitas na memória, uma para cada pai.
Devido à ambiguidade causada por várias cópias do mesmo avô na memória, o compilador não pode determinar qual cópia do avô o neto deve usar para acessar dados ou funções dos avós. Para remediar essa situação, em C ++, o avô é transformado em uma classe virtual ao declarar os pais. Isso faz com que o compilador faça apenas uma cópia do avô na memória que os dois pais compartilham. Depois que o avô se torna uma classe virtual, o compilador não tem problemas para decidir como o neto deve acessar o avô, porque há apenas uma cópia do avô.
Muito cuidado deve ser tomado ao estruturar hierarquias de classes, especialmente quando elas serão incluídas ou se tornarão a base de hierarquias muito maiores no futuro. A utilização adequada de uma classe virtual fornece às hierarquias de classe maior latitude no desenvolvimento; no entanto, eles podem causar erros difíceis de localizar. O estudo de sólidos princípios de engenharia de programação de computadores ajudará a garantir que efeitos colaterais inesperados da organização inadequada do programa não ocorram.