Bonjour,
J'ai un problème de polymorphisme et je voudrais savoir si c'est moi qui suis à la masse ou bien si c'est un bug dans mon code. (Dans les deux je suis à la masse).
Bref voici une représentation de mon code
Donc en fait ce que je voudrais c'est que lors de l'instanciation de la classe B, je passe par classe A. Cette classe A déclenche l'initialisation ( avec Init ). Mais je voudrais que cet appel lance la fonction ClassB::Init ().
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
47
48
49
50
51
52
53 // ----- ClassA.h ----- // class ClassA { ClassA ( ); ~ClassA ( ); virtual Init ( ); } // ----- ClassA.cpp ----- // ClassA::ClassA ( ) { Init ( ); } ClassA::~ClassA ( ) { } ClassA::Init ( ) { // Initialisation } // ----- ClassB.h ----- // class ClassB : public ClassA { ClassB ( ); ~ClassB ( ); virtual Init ( ); } // ----- ClassB.cpp ----- // ClassB::ClassB ( ) :ClassA ( ) { } ClassB::~ClassB ( ) { } ClassB::Init ( ) { ClassA::Init ( ); // Initialisation } // ----- Dans le reste de mon code ----- // ClassB * B = new ClassB ( );
Mais comme vous vous en doutez, ça ne marche pas.
En fait lors de l'instanciation de la classe A, il lance la fonction ClassA::Init ( ) et non celle de la classB. En debug, j'ai vérifier le type de l'objet en cours d'instanciation. Donc quand je suis dans ClassA le type est ClassA et quand je reviens dans ClassB l'objet est de type ClassB.![]()
Bref, il y a t'il un programme dans mon code ou alors ce n'est pas possible de la faire comme ça ?Je préviens, j'ai déjà mis les 3 colotes réglementaires quand un truc ne tourne pas rond. En espérant que c'est bien le PC qui a tord sinon les colotes sont pour moi.
Merci d'avance
Partager