Blz!
Outro dia na especialização[1], disciplina de Análise e Projeto de Software Orientado a Objetos (Prof. Araújo[2]), o professor mostrou um slide que falava de herança múltipla, e apesar de programar em c++ e já ter utilizado este recurso algumas vezes, surgiram dúvidas que eu não sabia responder e nem tinha idéia do que de fato aconteceria.
Para testar as idéias, modelei o diagrama abaixo na ferramenta BoUML[3]:

A idéia, era basicamente:
Tenho uma superclasse(Veiculo), que possui atributo(cor) e métodos, e uma linha de subclasses(Terrestre e Aquatico), que no caso vão implementar um método abstrato (imprimir) onde tal método consulta o atributo cor e vai dizer qual a cor de fato.
E utilizando o recurso da herança múltipla tenho a classe “Anfibio” que herda de “Terrestre” e “Aquatico” nesta ordem, pelo que vi isso influência na chamada do construtor das superclasses.
Logo abaixo temos o projeto na ide CodeBlocks[4]

Onde abaixo teremos o conteúdo da função main:
1-Neste bloco podemos ver que foi instanciado um objeto da classe “Anfibio”, porém ele será tratado como um objeto da classe “Terrestre”.
std::cout << “Terrestre * anfiTerrestre = new Anfibio();” <<std::endl;
Terrestre * anfiTerrestre = new Anfibio();
anfiTerrestre->imprimir();
delete(anfiTerrestre);
2-Neste bloco podemos ver que foi instanciado um objeto da classe “Anfibio”, porém ele será tratado como um objeto da classe “Aquatico”.
std::cout << “Aquatico * anfiAquatico = new Anfibio();” << std::endl;
Aquatico * anfiAquatico = new Anfibio();
anfiAquatico->imprimir();
delete(anfiAquatico);
3-Neste bloco podemos ver que foi instanciado um objeto da classe “Anfibio”, porém ele será tratado como um objeto da classe “Anfibio”.
std::cout << “Anfibio * anfibio = new Anfibio();” << std::endl;
Anfibio * anfibio = new Anfibio();
anfibio->Terrestre::imprimir();
delete(anfibio);
Como resultado da execução podemos observa a imagem abaixo:
Agora os fatos:
No caso “1″, a classe foi tratada pelo compilador como se houvesse herança apenas da classe “Terrestre”, onde inclusive pegou o valor que foi configurado no construtor da classe “Terrestre”.
No caso “2″, houve o mesmo tratamento do item “1″, porém foi para a classe “Aquatico”.
No caso “3″, parece existir na memoria da classe de forma separada os dois atributos “cor” um da superclasse “Terrestre” e o outro da “Aquatico”, e para que seja compilado deve-se informar em tempo de desenvolvimento qual atributo deve ser referenciado, para isso temos que usar a resolução de escopo, por exemplo:
Terrestre::cor
Quer dizer que quero usar o atributo cor definido no espaço de memória da classe “Terrestre”, o mesmo é válido no caso de métodos, que foi o caso do “imprimir” onde a classe “Anfibio” criou o método “imprimirNovo()”, apenas para validar a idéia, sua implementação pode ser vista abaixo:
void Anfibio::imprimirNovo()
{
std::cout << “\timprimirNovo()” << std::endl;
Aquatico::imprimir();
Terrestre::imprimir();
}
O que posso observar é que se tivermos que trabalhar com herança múltipla de uma mesma familia de classe podemos ter alguns problemas, mas que são facilmente contornados utilizando a resolução global, pelo menos no caso do compilador GCC, ele não permite compilarmos se houver algum problema de resolução, como no seguinte caso:
Anfibio * anfibio = new Anfibio();
anfibio->imprimir();
Qual imprimir deve ser chamado? afinal a classe “Anfibio” não implementou o método imprimir, o qual existe nas suas duas superclasses.
O compilador nos obriga a fazer essa construção, que pode parecer “feia” ou “estranha”, mas resolve o problema
Anfibio * anfibio = new Anfibio();
anfibio->Terrestre::imprimir();
Ou seja, novamente o nosso amigo “::” (operador de resolução) entra em cena para facilitar a vida do compilador e a nossa.
Com isso eu tenho em mente que pode dá trabalho programar com herança múltipla, porém não é esse bicho de sete cabeças que ouvimos dos nossos amigos(que trabalham com linguagens que não suportam este recurso).
Trabalho com Java e já me acostumei com o uso de “Interface”, apesar de achar que algumas vezes um herança múltipla seria de grande ajuda
T+!
Vida Longa e Próspera!
Observação:
Quem se interessar pode entrar em contato que mando os arquivos de projeto (bouml e codeblocks) para compilarem e brincarem a vontade. (Infelizmente não da pra fazer upload pro blog.)
Observação2:
Passei! Valeu pelo apoio dos amigos que me incentivaram a fazer a prova final da disciplina (no lugar do trabalho) 
Melhor nota impossível “10″, agora realmente tem nem como fazer o trabalho pra melhorar a média
———————————————-
Referência
[1] http://www.pgcomp.uece.br/index.php?option=com_content&task=section&id=6
[2] http://www.secrel.com.br/araujo
[3] http://bouml.free.fr
[4] http://www.codeblocks.org