Bonjour,
J'ai un problème avec un getter et je ne comprends absolument pas pourquoi.
Je vais essayer d'exposer la situation.
Si on a une classe Conteneur par exemple:
Un classe Objet qui contient des paramètres:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class Conteneur { private: Objet m_obj; };
Et donc une classe paramètres:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class Objet { private: Param m_param; public: Param& getParam(); };
Maintenant si on ajoute une méthode pour initialiser l'attribut m_obj:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Param { private: double m_p1; double m_p2; ... double m_pN; public: double getP1() const; void setP1(); }
Et que dans Object.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void Conteneur::initializeObj() { double p1 = ...; double p2 = ...; ... double pN = ...; m_obj.initilizeParam(p1,...,pN); }
Param.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void Objet::initializeParam(double& p1, double& p2, ..., double& pN) { m_param = Param(p1, .., pN); }
Le problème et le suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Param::Param(double& p1, ..., double& pN) : m_p1(p1), ..., m_pN(pN) { }
* lorque j'initialise les paramètres à travers le constructeur et qu'ensuite on lit ces valeurs (avec un getter, par exemple getP1()) il n'y a pas de problème, la valeur à bien été initialisée
* par contre, si après l'initilisation je modifie une valeur d'un paramètre (par un setter) et que je lis ensuite la valeurs du paramètre, la valeur renvoyée est celle initialisée par le construteur et non celle modifiée par le setter, exemple:
Quand j'affiche la valeur dans le setter de la classe Param, j'ai bien 3.14, mais dès qu'on accède à la valeur par le getter, il renvoie toujours la valeur initialisée dans le constructeur, à savoir 1.5.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void Conteneur::method() { initializeObj(); // les paramètres sont tous bien initilisés std::cout"<<\n p1 = "<<getObj().getParam().getP1(); // par exemple p1 = 1.5 ici // si ensuite double p1 = 3.14; getObj().getParam().setP1(p1); std::cout"<<\n p1 = "<<getObj().getParam().getP1(); // p1 vaut encore 1.5 au lieu de 3.14 }
Y a vraiment quelque chose qui m'échappe.
Merci de votre aide.
Partager