Bonjour,
J'ai un petit problème qui est le suivant :
j'ai une classe A et une classe B dérivant de ma classe A
Code :
- class A
- {
- private:
- const int a;
- public:
- A():a(0){}
- getVal() const {return a;}
- }
- class B : public A
- {
- private:
- int a;
- public:
- B():A(),a(0){}
- setValeur(int _a) {a = _a;}
- }
|
Le but est d'ajouter des methodes à la classe A pour pouvoir modifier ses attributs (ici un simple setValeur...)
Le problème est que si j'essaye de construire un B, que je modifie sa valeur (2 par exemple) et que j'essaye de la relire il me renvoi 0 !!!
En fait quand je construit un B, il y a construction d'un A et du champ a de B... en clair il y a deux champs "a", l'un est const et l'autre non.
(j'espère que vous suivez lol ) donc en fait après je modifie la valeur du champ "a" qui est non const et je lis la valeur du champ a qui est const et donc égale à 0.
Quand je défini le constructeur de B, je suis obligé d'appeler celui de A donc je suis bloqué ! cet héritage nous est imposé et il n'est pas possible de supprimer les const...
La seule solution que j'ai trouvée mais qui n'est pas propre est de redéfinir toutes les méthodes de A dans la classe B mais n'y a t'il pas une meilleure solution ?
Merci d'avance