Comment écrire un programme pour surcharger l'opérateur + afin qu'il puisse ajouter deux matrices?Comment faire pour surcharger l'opérateur
Répondre
De http://www.parashift.com/c++-faq-lite/operator-overloading.html#faq-13.1
L'idée est d'appeler des fonctions en utilisant la syntaxe des opérateurs C. Ces fonctions peuvent être définies pour accepter paramètres de types définis par l'utilisateur, donnant les opérateurs définies par l'utilisateur signification. Par exemple:
Matrix add(const Matrix& x, const Matrix& y); Matrix operator+(const Matrix& x, const Matrix& y); Matrix use_add(const Matrix& a, const Matrix& b, const Matrix& c) { return add(a,add(b,c)); } Matrix use_plus(const Matrix& a, const Matrix& b, const Matrix& c) { return a + b + c; }
En outre, this fil forum de lansinwd traite en détail
Notez que le code fourni ne provient pas de la FAQ C++ actuelle, mais de ce qui semble être une version plus ancienne. (Une raison pour laquelle ils ont probablement changé l'exemple est que 'use_add()' et 'use_plus()' ne sont pas exactement identiques.) – sbi
La façon idiomatiques surcharger les opérateurs est la suivante.
struct M {
...
M & operator+=(M const& rhs) {
loop * 2 to increment
return this;
}
};
M operator+(M lhs, M const& rhs) {
return lhs += rhs;
}
Mais un coup d'oeil à Blitz ++, NEWMAT et stimuler des solutions qui éliminent les objets temporaires grâce à Modèles d'expression - C++ références rvalue de solution 0x simplifieront ET. NB: Vous préférerez implémenter op * = en termes d'op * plutôt que l'inverse.
En utilisant 'M operator + (M lhs, M const & rhs) {lhs + = rhs; retournez lhs; } '(en tant que deux lignes au lieu d'une seule ligne) améliore les changements du compilateur de l'optimisation des copies: il est clair que la référence renvoyée est' lhs'. Si vous l'appliquez en tant que doublure, le compilateur ne peut pas deviner si la référence renvoyée par 'lhs + = rhs' est réellement une référence à' lhs' ou à tout autre objet. (Les tests avec g ++ - 4.3.3 -O3 ne montrent aucune différence de toute façon) –
- 1. Comment surcharger l'opérateur d'indirection? (C++)
- 2. Comment surcharger l'opérateur in dans Groovy?
- 3. comment surcharger Ctrl + V dans TinyMCE
- 4. Comment surcharger correctement l'opérateur << pour un ostream?
- 5. surcharger nouveau/supprimer
- 6. Comment surcharger l'opérateur opAssign "globalement" en C++
- 7. Comment surcharger les opérateurs avec Boost.Python
- 8. Java surcharger vs écraser
- 9. Surcharger, dérouter et cacher?
- 10. Surcharger failUnlessEqual dans unittest.TestCase
- 11. Pouvez-vous surcharger l'opérateur d'affectation pour les enregistrements Delphi?
- 12. Comment puis-je surcharger l'affectation d'un membre de la classe?
- 13. Possible de surcharger l'opérateur null-coalescent?
- 14. Surcharger une méthode au niveau de l'instance
- 15. Comment faire pour redessiner l'écran?
- 16. Comment faire pour désactiver "periodically_call_remote"
- 17. Comment faire pour étendre Array.prototype.push()?
- 18. Comment faire pour exclure SyntaxError?
- 19. Comment faire pour basculer flash.media.Video?
- 20. Comment faire pour tester l'application pour Vista
- 21. Comment faire pour faire défiler un RichTextBox vers le bas?
- 22. Comment faire pour faire correspondre le filtre Microsoft.Matrix au canevas?
- 23. Existe-t-il un moyen de surcharger + = en python?
- 24. Surcharger correctement un stringbuf pour remplacer cout dans un fichier mex MATLAB
- 25. Possibilité de surcharger la création de site dans Sharepoint?
- 26. a: hover ne pas surcharger la classe parente
- 27. Est-il possible de surcharger le développement des facelettes pour différents environnements?
- 28. Comment faire pour annuler System.loadLibrary en Java
- 29. Comment faire pour div diviser l'espace
- 30. Comment faire pour dérouler manuellement un DataGridViewComboBoxColumn?
ressemble à des devoirs –
pouvez-vous fournir ce que vous avez? –
qu'avez-vous fait jusqu'ici? – marcosbeirigo