Transtypage cours Christian Casteyde
Salut,
Je suis en train de me faire le cours de Christian Casteyde pour vraiment apprendre le C++.
Je suis au niveau du transtypage Seulement je ne comprend pas bien son exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| struct A
{
virtual void f(void)
{
return ;
}
};
struct B : virtual public A
{
};
struct C : virtual public A, public B
{
};
struct D
{
virtual void g(void)
{
return ;
}
};
struct E : public B, public C, public D
{
};
int main(void)
{
E e; // e contient deux sous-objets de classe B
// (mais un seul sous-objet de classe A).
// Les sous-objets de classe C et D sont
// frères.
A *pA=&e; // Dérivation légale : le sous-objet
// de classe A est unique.
// C *pC=(C *) pA;// Illégal : A est une classe de base
// virtuelle (erreur de compilation).
C *pC=dynamic_cast<C *>(pA); // Légal. Transtypage
// dynamique vertical.
D *pD=dynamic_cast<D *>(pC); // Légal. Transtypage
// dynamique horizontal.
B *pB=dynamic_cast<B *>(pA); // Légal, mais échouera
// à l'exécution (ambiguïté).
return 0 ;
} |
Deja il met en commentaire que C et D sont freres, je vois pas comment... ensuite je ne comprend pas pourquoi la derniere ligne doit échouer?
Est ce que quelqu'un peut m'expliquer?
Merci d'avance