Non, le C++ n'a pas de concept de propriétés. Bien qu'il puisse être gênant de définir et d'appeler getThis() ou setThat(value), vous indiquez au consommateur de ces méthodes qu'une certaine fonctionnalité peut se produire. L'accès aux champs en C++, en revanche, indique au consommateur qu'aucune fonctionnalité supplémentaire ou inattendue ne se produira. Les propriétés rendent cela moins évident, car l'accès aux propriétés semble à première vue réagir comme un champ, mais réagit en fait comme une méthode.
Pour l'anecdote, je travaillais sur une application .NET (un CMS très connu) en essayant de créer un système d'adhésion des clients. En raison de la façon dont ils avaient utilisé les propriétés pour leurs objets utilisateurs, des actions se déclenchaient que je n'avais pas prévues, ce qui faisait que mes implémentations s'exécutaient de façon bizarre, y compris par récursion infinie. Ceci était dû au fait que leurs objets utilisateurs faisaient des appels à la couche d'accès aux données ou à un système de cache global lorsqu'ils tentaient d'accéder à des choses simples comme StreetAddress. Leur système entier était fondé sur ce que j'appellerais un abus de propriétés. S'ils avaient utilisé des méthodes au lieu de propriétés, je pense que j'aurais compris beaucoup plus rapidement ce qui n'allait pas. S'ils avaient utilisé des champs (ou au moins fait en sorte que leurs propriétés se comportent davantage comme des champs), je pense que le système aurait été plus facile à étendre et à maintenir.
[Edit] J'ai changé d'avis. J'avais eu une mauvaise journée et je me suis un peu emporté. Ce nettoyage devrait être plus professionnel.
73 votes
Cela pourrait être fait avec quelques macros. s'enfuit honteusement
0 votes
Je rends tout public et j'accède directement aux champs dans le cadre de l'interface publique de la classe. Si un champ doit vraiment être privé, je le fais précéder d'un trait de soulignement, mais on peut quand même y accéder s'il y a une raison impérative. C'est une mauvaise idée si vous avez des développeurs incompétents dans votre équipe qui en abusent. canards
7 votes
@Eloff : Rendre tout public est TOUJOURS une mauvaise idée.
8 votes
Ce concept n'existe pas ! Et vous n'en avez pas besoin non plus : seanmiddleditch.com/why-c-does-not-need-c-like-properties
2 votes
A) cette question est assez ancienne b) je demandais un sucre syntaxique, qui me permettrait de me débarrasser des parenthèses c) bien que l'article présente des arguments valables contre l'adaptation des propriétés, la question de savoir si le C++ "a besoin ou non" de propriétés est très subjective. Le C++ est équivalent à la Touring-machine même sans elles, mais cela ne signifie pas qu'avoir un tel sucre syntaxique rendrait le C++ plus productif.
0 votes
C'est vieux mais pertinent. La réponse acceptée actuellement n'est pas complète, envisagez d'en accepter une autre.
0 votes
Pour des raisons de débogage, il m'arrive de convertir une variable membre publique (ick) en un opérateur getter et setter nommé (en utilisant les techniques décrites dans les réponses). Trouvez le bogue, puis supprimez cette instrumentation. C'est une technique pratique pour traquer les bogues, mais pas quelque chose à laisser en place pour la production (imo).
0 votes
@Kaiserludi pas nécessairement, si tout est public et statique vous êtes en sécurité =))) {sarcastices fermés}
0 votes
J'ai bien peur que non. 4321
3 votes
Définitivement non.
1 votes
Non, mais d'autant plus qu'il s'agit d'une lecture seule.
const Foo& foo(): const;
0 votes
Cette question est assez ancienne. Je demandais un sucre syntaxique, qui me permettrait de me débarrasser des parenthèses, bien que l'article présente des arguments valables contre l'adaptation des propriétés, la question de savoir si le C++ "a besoin ou non" de propriétés est très subjective. Le C++ est équivalent à la Touring-machine même sans elles, mais cela ne signifie pas qu'avoir un tel sucre syntaxique rendrait le C++ plus productif.
2 votes
Il n'y en a pas, principalement parce que cet anti-modèle est insensé. Tout ce qu'il tend à faire, c'est contourner l'encapsulation. Mais il n'y a pas de mal à demander.
1 votes
@CinCout, je reçois actuellement HTTP 500 connexion refusée sur votre lien. Au cas où il ne s'agirait pas d'une panne passagère : web.archive.org/web/20170924162758/http://seanmiddleditch.com/