2009-11-12 7 views
2

Si j'ai une classe C++ qui contient une variable membre statique, la méthode accesseur de cette variable doit elle aussi être statique? En outre, y a-t-il des problèmes qui pourraient survenir si j'inscris cette méthode?Variable de membre statique et méthode

Répondre

7

n'a pas besoin d'être pour être statique, mais à moins de faire quelque chose de spécifique à une instance particulière de la classe, il n'y a pas vraiment de raison de ne pas le rendre statique de toute façon.

Cela ne devrait en aucun cas affecter l'inlining.

3

L'objectif d'écrire une méthode d'accès est de cacher l'implémentation de certaines propriétés de la classe à des utilisateurs externes. Ce que vous voulez cacher et ce que vous ne voulez pas cacher est quelque chose que vous pouvez décider. Une décision comme celle-ci ne peut pas être faite mécaniquement, comme dans "puisque le membre de données est statique, l'accesseur doit aussi être statique". C'est une approche désespérément erronée.

Encore une fois, le point d'écrire l'accesseur est de découpler l'utilisateur de toutes (ou certaines des) connaissances concernant le membre de données sous-jacent. Le membre de données peut même ne pas exister physiquement. L'utilisateur n'a pas besoin de savoir s'il existe physiquement ou non. Le membre de données lui-même pourrait exister physiquement aujourd'hui et disparaître demain. L'utilisateur n'est pas censé s'en préoccuper. C'est ce que vous obtenez en forçant les utilisateurs à utiliser un accesseur. Donc, dans votre cas, en rendant l'accesseur statique, vous déclarez et exposez automatiquement le fait que la propriété correspondante est spécifique à la classe entière, et non à un objet particulier de la classe. Notez, encore une fois, que l'état statique du membre de données est à côté du point ici: personne ne saura ou ne se souciera jamais s'il y a un membre de données physique derrière cet accesseur. En rendant l'accesseur non statique, vous déclarez et exposez automatiquement le fait que la propriété peut être spécifique à un objet particulier de la classe

C'est ce qui devrait guider votre décision. Vous ne fournissez pas suffisamment de détails sur la propriété en question, donc nous ne pouvons pas vous aider ici à décider.

Questions connexes