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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
class Conteneur
{
  private:
    Objet m_obj;
};
Un classe Objet qui contient des 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();
};
Et donc une classe paramètres:
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();
}
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
void Conteneur::initializeObj()
{
  double p1 = ...;
  double p2 = ...;
  ...
  double pN = ...;
  m_obj.initilizeParam(p1,...,pN);
}
Et que dans Object.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);
}
Param.cpp:
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)
{
}
Le problème et le suivant
* 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:

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
}
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.

Y a vraiment quelque chose qui m'échappe.

Merci de votre aide.