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 : Sélectionner tout - Visualiser dans une fenêtre à part
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