[quote=“mmpaulo”]hilmilho
no caso de métodos conflitantes, poderia ser usada a assinatura dos métodos para fazer a diferenciação(como quando vc define métodos com o mesmo nome e assinaturas diferentes em uma mesma classe, por exemplo)… [/quote]
Provavelmente os métodos representam o mesmo comportamento. Diferenciá-los, como você disse nas entrelinhas, não seria possível em métodos sem parâmetros. Para métodos com um parâmetro, seria possível acresentar outro para diferenciar. Um desavisado poderia tentar remover esse parâmetro aparentemente inútil. Outra opção, em assinaturas com dois ou mais parâmetros, mudar a ordem dos mesmos. Talvez mudar o tipo de um parâmetro também ajude. Mas se acrescentarmos ali, além de Dinossauro e Sapo, mais alguns tipos de animais, essa diferenciação por assinatura vai ficando inviável. Acho que nisso o Java mandou bem.
dinossauro = (Dinossauro) sapossauro;
dinossauro.falar()
Aí seria preciso “jogar fora” a parte Sapo do objeto sendo ‘casteado’. me parece que em C++ é possível acessar o endereço de uma das classes componentes da herança múltipla. Interessante:
[quote]class A {…};
class B : public A {…};
class C : public A {…};
class D : public B, public C {…};
If you create an object of class D, that object may have up to five
different addresses, depending upon how its used:
D d; // create object of class D
D* p1 = &d; // p1 is address of D part of d
B* p2 = &d; // p2 is address of B part of d
C* p3 = &d; // p3 is address of C part of d
A* p4 = (B*) &d; // p4 is address of A part of B part of d
A* p5 = (C*) &d; // p5 is address of A part of C part of d[/quote]
http://cpptips.hyperformix.com/cpptips/diff_address