Conventions pour les méthodes accesseurs (getters et setters) en C++

Plusieurs questions à propos des méthodes accesseur en C++ ont été posées sur, mais aucun n'a été en mesure de satisfaire ma curiosité sur la question.

J'essaie d'éviter les accesseurs chaque fois que possible, parce que, comme Stroustrup célèbres et d'autres programmeurs, je considère une classe avec beaucoup d'entre eux un signe de mauvais OO. En C++, je peux, dans la plupart des cas, ajouter plus de responsabilité à une classe ou à l'utilisation de l'ami de mot-clé pour les éviter. Pourtant, dans certains cas, vous avez vraiment besoin de l'accès à certains membres de la classe.

Il y a plusieurs possibilités:

1. Ne pas utiliser des accesseurs à tous les

Nous pouvons juste faire respectifs des variables de membre du public. C'est un no-go en Java, mais semble être OK avec le C++ de la communauté. Cependant, je suis un peu inquiet à propos de cas ont été explicite d'une copie ou lecture seule (const) une référence à un objet doit être renvoyé, c'est que exagérées?

2. L'utilisation de Java de style méthodes get/set

Je ne sais pas si c'est du Java, mais je veux dire ceci:

int getAmount(); //Returns the amount
void setAmount(int amount); //Sets the amount

3. Utiliser objective-C-style méthodes get/set

C'est un peu bizarre, mais apparemment de plus en plus commun:

int amount(); //Returns the amount
void amount(int amount); //Sets the amount

Dans l'ordre pour que cela fonctionne, vous devrez trouver un autre nom pour votre membre de la variable. Certaines personnes, ajouter un trait de soulignement, d'autres à mettre "m_". Je n'aime pas non plus.

Style utilisez-vous et pourquoi?

  • Petit-seulement les structures de côté, ce qui vous a donné l'impression de variables de membre publiques serait ok en C++? Ses généralement pas ainsi.
  • Oui, c'est un no-go en C++. Mais si vous avez travaillé avec MFC, vous pourriez obtenir de l'hypothèse qu'il serait OK.
  • Plus récemment discuté en tant que [set/get méthodes en C++ ](stackoverflow.com/questions/3632533), que j'ai trouvé avec les moteurs de recherche "c++ getter setter". Voir aussi [Getter et setter, des pointeurs ou des références et de la bonne syntaxe à utiliser en c++? ](stackoverflow.com/questions/1596432), C++ getters/setters style de codage et probablement d'autres.
  • Voir cet article (PDF) pourquoi getters/setters sont tout simplement faux.
  • Fritzsche: je pense que je l'ai vu dans la STL et boost, mais je ne suis pas sûr en fait. @dmckee: Oui, il y a un tas de messages sur ce sujet et ils sont tous intéressants, mais aucun ne répond à mes questions spécifiques.
  • Je ne vois pas comment vous question d'ajouter quoi que ce soit. Il reste juste poser une question stylistique qui a été aldready demandé à de multiples reprises ici, je suis à peu près sûr. Vous pourriez peut-être le point où votre question en fait d'innover? Vous ne semblent même pas au point que vous pourriez en fait besoin d'un get et pas un ensemble de méthode ou toute autre variante.
  • Vous auriez à me forcer à écrire publique getters et setters en C++; ils sont clairement inutiles sur leur visage, à moins qu'ils ont un effet secondaire.