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:
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?
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 ; }
Est ce que quelqu'un peut m'expliquer?
Merci d'avance
Partager