Accesseur d'une variable membre (setter)
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:
1 2 3 4 5
| class Conteneur
{
private:
Objet m_obj;
}; |
Un classe Objet qui contient des paramètres:
Code:
1 2 3 4 5 6 7
| class Objet
{
private:
Param m_param;
public:
Param& getParam();
}; |
Et donc une classe paramètres:
Code:
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:
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:
1 2 3 4
| void Objet::initializeParam(double& p1, double& p2, ..., double& pN)
{
m_param = Param(p1, .., pN);
} |
Param.cpp:
Code:
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:
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.