Ce que signifie le modificateur const après une déclaration de méthode - page 2

 
Vasiliy Sokolov:
La méthode constante est un autre exemple du proverbe "nous voulions faire mieux, mais il s'est avéré que c'était toujours la même chose". Je pense que c'est une devise pour le C++ tout court. Il n'y a pas d'utilisation pratique mais cela complique considérablement la conception des programmes OOP parce que vous devez constamment contrôler le type d'objet qui est modifié (il doit aussi être constant).

Je peux vous donner un exemple de ce que vous avez écrit ?

 
Vasiliy Sokolov:
La méthode constante n'est qu'un autre exemple du proverbe "Nous voulions que les choses soient meilleures, mais elles se sont déroulées comme d'habitude". Je pense que c'est une devise pour C++ tout court. Elle n'a aucune utilité pratique mais complique considérablement la conception des programmes OOP car il faut constamment contrôler le type de l'objet modifié (il doit aussi être constant).

))) J'ai un vieux livre de Stroustrup qui traîne, si des cambrioleurs s'introduisent dans la maison, je peux les frapper avec, il pèse comme une brique ;)) Le vieil homme avait tellement de mal avec sa langue.

Je me souviens qu'il y a longtemps, j'ai été poursuivie lors d'un entretien d'embauche, ils m'ont posé une question et je n'ai pas pu y répondre avec précision. Ils m'ont apporté un livre comme celui-ci, je l'ai lu et j'ai demandé : "L'utilisez-vous vous-même ?

J'ai demandé : "L'utilisez-vous vous-même ?" Les gars rient, c'est bon, personne n'a encore répondu correctement à cette question, car personne ne l'utilise.

À propos, j'ai un livre sur les plus datant du début des années 90, avant l'adoption de la première norme. Un livre de poche normal et digeste. Mais alors Ostap s'est emporté))

 
Alexey Kozitsyn:

Puis-je avoir un exemple de ce que vous avez écrit ?

Alexey a écrit un exemple. Une méthode constante ne peut pas modifier les membres de sa classe. Quel semble être le problème ? Il suffit de ne pas utiliser le modificateur const. Mais il y a ensuite des difficultés dans l'héritage (surtout à partir de labibliothèque standard) : le concepteur a défini une méthode virtuelle const, mais dans la classe dérivée, la méthode doit changer quelque chose dans ses données - et il y a un bouchon à cause de const. Sans elle, la méthode ne sera pas surchargée, et avec elle, la méthode dérivée ne peut pas modifier les données de sa propre classe.

Quelle est la principale erreur dans l'introduction d'un tel modificateur pour les méthodes de classe ? Le principe principal de l'héritage est violé : spécialisation et raffinement. La classe de base interdit à la méthode de la classe dérivée de travailler avec ses données internes. Et une telle situation ne devrait pas exister.

 
Vasiliy Sokolov:

Sharpe pue à un kilomètre).

Il n'y a rien de gênant, pas besoin d'en rajouter.

 
Комбинатор:

Sharpe pue à un kilomètre).

Je ne le nie pas. Sharpe est vraiment une langue parfaite, grande et belle.

Combinateur:

Const ne complique rien, ne fait pas de blabla

Ok, disons qu'on peut toujours se débarrasser de Const. Mais pourquoi n'expliquez-vous pas brièvement, par exemple, ce que fait Const ? Quelle est sa véritable utilité ? Par exemple, et de préférence pas écrit de toutes pièces.

 
La constance est l'une des métaphores frappantes du C++ : d'abord vous posez diligemment des pièges élaborés partout dans le code, puis vous vous sortez de vos propres pièges - c'est tout le processus de la programmation C++.
 
Vasiliy Sokolov:

...

Quelle est l'erreur principale de l'introduction d'un tel modificateur pour les méthodes de classe ? Le principe principal de l'héritage est violé : spécialisation et raffinement. La classe de base interdit aux méthodes de la classe dérivée de travailler avec ses données internes. Mais il ne doit pas y avoir de telle chose.

Peut-être s'agit-il d'une partie qui passe des créateurs aux simples utilisateurs. Comme la fonction de démarrage dans le conseiller expert et les variables Bid et Ask.

Lorsque l'on fabrique tout soi-même, il est inutile de s'embarrasser de toutes sortes de contraintes.

 
Vasiliy Sokolov:

Je ne le nie pas. Sharp est en effet une langue parfaite, grande et belle.

...

Super. Mais c'est loin d'être parfait.
 
Dmitry Fedoseev:
Super. Mais c'est loin d'être parfait.
The Sharp est bon, non pas grâce aux génies qui l'ont réalisé, mais parce que c'est le dernier. Avant cela, pendant 30 ans, ils ont essayé de tuer avec des râteaux de différentes tailles et de configurations fantaisistes. Le C++ a été un merveilleux terrain d'expérimentation pour cela. Après que tout le monde ait été tué, les gars de Microsoft ont juste filé. .... a adopté les concepts éprouvés et a créé de toutes pièces un langage syntaxiquement propre.
 
À propos, MetaQuotes a également eu une bonne chance de "développer" progressivement MQL5 en un monstre de type Robe à la C++. Mais une connaissance approfondie du C++ (où il a dû y avoir de la sueur, des larmes et de la haine) leur a fait comprendre qu'ils ne devaient pas suivre les conseils des programmeurs C++ de la vieille école du forum. C'est pourquoi nous disposons aujourd'hui d'un langage de programmation syntaxiquement propre et plus ou moins strictement typifié. Il est même étonnant que nous ayons réussi à créer un tel bonbon, basé sur un héritage complètement monstrueux. La maîtrise ne se perd pas, comme on dit.