Bonjour !
J'ai fait quelque tests sur les énumérations pour imiter un héritage des énumérations.
J'ai fini par arriver à ce code, qui fonctionne parfaitement chez moi :
Ce qui me trouble un peu, c'est qu'une énumération peut prendre un peu n'importe quel valeur dès qu'on fait un cast de int vers l'énumération.
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 #include <iostream> using namespace std; class A { public : enum Em_A { ZERO, ONE }; A(const Em_A& val = ZERO) : a(val) {} int a_() const { return a; } protected : Em_A a; }; class B : public A { public : enum Em_B { ZERO, ONE, TWO }; B(const Em_B& val = ONE) : A(static_cast<Em_A>(val)) {} void seta(const Em_B& val) { a = static_cast<Em_A>(val); } }; int main() { A a; B b; cout << "a.a == " << a.a_() << " ; b.a == " << b.a_() << endl; b.seta(B::TWO); // Fonctionne si je mets : b.seta(static_cast<B::Em_B>(89)); cout << "a.a == " << a.a_() << " ; b.a == " << b.a_() << endl; return 0; }
Or, je pensais jusqu'ici que les énumérations étaient limitées aux constantes qu'on lui donne.
Dans mon exemple, l'attribut a de type Em_A peut prendre des valeurs en dehors de ZERO et ONE. Et ça fonctionne avec des entiers "hors sujets" comme 3, 5, 89.
Une instance d'énumération serait donc tout simplement un entier ?
J'ai lu je n'sais plus où qu'en C++0x (ou C++11), il y a un changement de comportement pour les énumérations et qu'elle n'étaient plus considérées comme des entiers.
EDIT : corrections orthographiques.
Partager