Salut,
Effectivement, bien que l'on puisse discuter 107 ans sur l'utilité de getters (je partage l'avis de certains que c'est souvent inutile et que cela viole régulièrement demeter), si tu en place un, il faut veiller:
- à ce que la fonction soit constante (pour pouvoir l'appeler depuis des objets constants)
- à ne jamais renvoyer une référence non constante vers le membre (ce qui te ferait perdre tout l'intérêt de l'encapsulation)
De plus, lorsqu'il s'agit de renvoyer un type primitif (int, double, ...), l'intérêt de le renvoyer par référence est réduit à presque rien car ce n'est pas la copie de ce genre de données qui prend réellement du temps ou qui peut poser problème.
Enfin, on peut réellement se poser la question de l'intérêt de les renvoyer sous forme constante, etant donné qu'il ne s'agit pas d'une référence mais d'une copie de l'objet, et que de ce fait la modification de la variable qui la reçoit, si elle est effectivement illogique, n'aura aucun impact sur l'objet lui-même
Par contre, tu devrais envisager d'utiliser plutôt les listes d'initialisations, même pour les types primitifs
Il existe en effet des pseudo constructeurs pour les types primitifs, et, de manière générale, c'est une bonne habitude à prendre car, pour des classes plus complexes, l'affectation dans le constructeur peut avoir des conséquences gourmandes en temps et en mémoire.
Ainsi, le constructeur par défaut de ta classe pourrait très bien être proche de
1 2 3 4 5
| Classe::Classe():_num(0),_ain(0),
_benj(0),_eff(0),
_ward(0.0),_ind(0.0)
{
} |
(idem pour les autre)
Pour terminer sur le détail qui concerne uniquement la visibilité du code, je te conseillerais très franchement de veiller à ce qu'il n'y ait qu'une instruction par ligne (voire, si une instruction est réellement trop longue, une instruction sur plusieurs ligne), et donc d'éviter les codes proches de
_num = _aine = _benj = _eff = 0;
ou de
_num = num; _ward = ward; _ind = ind; _eff = c1.getEffectif() + c2.getEffectif();
Le premier n'est en effet qu'un "sucre syntaxique" datant du temps où les compilateurs avaient vraiment besoin d'être aidés dans leurs optimisations, et n'est actuellement pas plus efficace que
1 2 3 4
| _num =0;
_aine = 0;
_benj = 0;
_eff = 0; |
le second revient strictement à
1 2 3 4
| _num = num;
_ward = ward;
_ind = ind;
_eff = c1.getEffectif() + c2.getEffectif(); |
avec, chaque fois, la lisibilité du code en moins
Partager