Bonjour,

Voila je suis nouveau sur le forum, j'ai épluché un peu le site à la recherche d'infos sur ce sujet, j'ai obtenu des infos intéressantes mais des questions subsistes.

Voici un petit exemple qui illustre mes interrogations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
class CRoue
{
private:
    float m_fDiametre;
public:
    const float & GetDiametre() const;
    void SetDiametre(cont float & fDiametre);
}
 
class CVoiture
{
private:
    CRoue m_roue;
 
public:
    const CRoue & GetRoue() const;
}
peut on remplacer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
const float & GetRoue() const;
par :
ainsi on peut appliquer le mutateur SetDiametre() directement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
void main()
{
    CVoiture voiture;
    voiture.GetRoue().SetDiametre(500.0);
}
Ou faut il garder :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
const float & GetRoue() const;
et créer le mutateur du diamètre de la roue directement dans la classe CVoiture? :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
class CVoiture
{
private:
    CRoue m_roue;
 
public:
    const CRoue & GetRoue() const;
    void SetDiametreRoue(const float & fDiametre);
}
 
void CVoiture::SetDiametreRoue(const float & fDiametre)
{
    this->m_roue.SetDiametre(fDiametre);
}
 
void main()
{
    CVoiture voiture;
    voiture.SetDiametreRoue(500.0);
}
Un accesseur n'est pas censé modifier la donnée qu'il retourne mais peut il retourner un pointeur sur cette donnée pour que celle ci soit modifiée?
Sinon, doit on développer des mutateurs dans chaque classe contenant l'objet à modifier (ex : SetDiametre() et SetDiametreRoue() un mutateur par classe) ? Ceci alourdit le code, y'a t'il une autre solution?

Voila, j'espère avoir été clair
Merci d'avance