Imaginez que vous ayez une classe avec des douzaines de variables membres privées. Chaque variable membre a un getter public et une fonction setter:Classe composée d'autres classes, plus grandes, problème
class Foo
{
public:
int GetA() const { return m_a; }
:
int GetZ() const { return m_z; }
void SetA(int val) { m_a = val; }
:
void SetZ(int val) { m_z = val; }
private:
int m_a;
:
int m_z
};
Maintenant, nous avons une deuxième classe, qui est composé de Foo (entre autres):
class Bar
{
private:
// some instances of other classes of about the same complexity as Foo
Foo m_foo;
};
Bar Donc, est essentiellement une classe qui lie les instances d'autres classes dans une même entité.
Les fonctions qui sont passées à une instance de Bar voudront accéder à m_foo
afin qu'elles puissent appeler ses fonctions getter et setter. Conscient du conseil de Scott Meyers dans Effective C++ (3ème édition - item # 28), je suis réticent à ajouter quelque chose qui retourne un 'handle' à m_foo, par ex.
Foo& GetFoo() const { return m_foo; } // dubious const, I know
Ai-je d'autres options que de répliquer chaque getter et setter dans Bar?
Je travaille avec du code hérité qui est assez paresseux pour rendre 'm_foo' public! Mais cela va à l'encontre d'un autre conseil de Scott (item # 22 dans ce cas - "déclarer les membres de données privés").
Un moyen de sortir de cette liaison?
Non seulement le const est douteux, mais c'est faux. m_foo sera const dans le contexte de cette méthode. –