Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1140 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] const / redéfinir un attribut d'une classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] const / redéfinir un attribut d'une classe

n°1283567
The Mauler
Posté le 14-01-2006 à 14:18:41  profilanswer
 

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 :
  1. class A
  2. {
  3. private:
  4.    const int a;
  5. public:
  6.    A():a(0){}
  7.    getVal() const {return a;}
  8. }
  9. class B : public A
  10. {
  11. private:
  12.    int a;
  13. public:
  14.    B():A(),a(0){}
  15.    setValeur(int _a) {a = _a;}
  16. }


 
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 ;)

mood
Publicité
Posté le 14-01-2006 à 14:18:41  profilanswer
 

n°1283573
Taz
bisounours-codeur
Posté le 14-01-2006 à 14:37:21  profilanswer
 

ben de n'avoir qu'un seul a (et pas const). ou bien d'avoir juste une interface  
 

Code :
  1. class Valeur {
  2.   public :
  3.   virtual void set(int nouvelle) = 0;
  4.   virtual int get() const =0;
  5.   virtual ~Valeur();
  6. };

n°1283583
The Mauler
Posté le 14-01-2006 à 15:09:37  profilanswer
 

Merci pour ta réponse,
En fait dans le projet qu'on doit réaliser on nous a demandé de redéfinir une classe liste utilisant des itérateurs desssus (sans utiliser la STL) et on doit définir un itérateur en lecture seule (qui ne devra donc pas modifier la liste) et un itérateur en lecture et écriture qui dérive du précédant.
Le 1er sert pour lire les listes non modifiables (définies comme constantes) ce que ne peut pas faire le second.
 
Bref tout ça pour dire qu'on est obligé d'avoir une donnée const et l'autre non constante. (a et j'aoubliais et on ne doit pas non plus utiliser const_cast...)
C'est vrai que c'est un peu bizarre mais c'est imposé par mon prof.
 
Pour l'interface c'est une très bonne idée :-) .... mais malheureusement on nous impose d'utiliser l'héritage que j'ai détaillé au dessus :'(

n°1283603
Taz
bisounours-codeur
Posté le 14-01-2006 à 15:46:26  profilanswer
 

mon oeil ...
 

Code :
  1. #
  2. class A
  3. #
  4. {
  5. #
  6. private:
  7. #
  8.   const int a;
  9. #
  10. public:
  11. #
  12.   A():a(0){}
  13. #
  14.   getVal() const {return a;}
  15. #
  16. }


 
tu ne pourras jamais rien faire avec ça.

n°1283653
The Mauler
Posté le 14-01-2006 à 17:49:01  profilanswer
 

arf ben je vais quand même devoir modifier des trucs alors. Mais je te ment pas en disant qu'on nous a imposé cette structure...
Enfin, merci quand même pour tes conseils :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] const / redéfinir un attribut d'une classe

 

Sujets relatifs
changer valeur d'un attribut dans fichier xmltronquer attribut en XSL
Redefinir le destructeur ou destructeur par defaut?Créer une classe en C++ qui contient les éléments de string.h
[DEV C++] Donnée membre private static de type classe[Résolu]classe mutable/immutable..
Classe abstraite et tableau d'objetsAttribut onunload de la balise body
probleme sur le retun d'une classe de load XMLProblème de callback avec array_map dans une classe
Plus de sujets relatifs à : [C++] const / redéfinir un attribut d'une classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR