Surchage d'opérateur
Résolu/Fermé
Utilisateur anonyme
-
22 févr. 2017 à 20:48
mamiemando Messages postés 33453 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 janvier 2025 - 27 févr. 2017 à 10:30
mamiemando Messages postés 33453 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 janvier 2025 - 27 févr. 2017 à 10:30
3 réponses
mamiemando
Messages postés
33453
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
6 janvier 2025
7 812
Modifié par mamiemando le 23/02/2017 à 10:15
Modifié par mamiemando le 23/02/2017 à 10:15
Bonjour,
Pour commencer, je t'invite à regarder la classe std::vector<T>
http://www.cplusplus.com/reference/vector/vector/
S'il te manque des opérateurs tu peux tout à fait les définir (ils faudra qu'ils soient
Mais j'imagine qu'ici ton but est plutôt de t'exercer. Donc voici ci-dessous un exemple simple qui te montre des surcharges d'opérateurs. Le but n'est pas ici de proposer une classe générique (j'ai hardcodé un tableau de 5 entiers), le code se généralise à n éléments de mêmes types sous réserves de faire des allocations mémoires et d'utiliser des templates. Afin de ne pas noyer le poisson avec ces deux notions supplémentaires, je reste donc sur l'exemple simple.
Ce qui donne :
Bonne chance
Pour commencer, je t'invite à regarder la classe std::vector<T>
http://www.cplusplus.com/reference/vector/vector/
S'il te manque des opérateurs tu peux tout à fait les définir (ils faudra qu'ils soient
template).
Mais j'imagine qu'ici ton but est plutôt de t'exercer. Donc voici ci-dessous un exemple simple qui te montre des surcharges d'opérateurs. Le but n'est pas ici de proposer une classe générique (j'ai hardcodé un tableau de 5 entiers), le code se généralise à n éléments de mêmes types sous réserves de faire des allocations mémoires et d'utiliser des templates. Afin de ne pas noyer le poisson avec ces deux notions supplémentaires, je reste donc sur l'exemple simple.
#include <iostream> class my_vector { private: int m_data[5]; public: my_vector(){} int & operator[] (std::size_t i) { return this->m_data[i]; } int operator[] (std::size_t i) const { return this->m_data[i]; } }; my_vector operator - ( const my_vector & x, const my_vector & y ) { my_vector r; for (std::size_t i = 0; i < 5; i++) { r[i] = x[i] - y[i]; } return r; } std::ostream & operator << ( std::ostream & os, const my_vector & x ) { os << '['; for (std::size_t i = 0; i < 5; i++) { os << ' ' << x[i]; } os << " ]"; return os; } int main() { my_vector x; x[0] = 10; x[1] = 20; x[2] = 30; x[3] = 40; x[4] = 50; std::cout << "x = " << x << std::endl; my_vector y; y[0] = 1; y[1] = 2; y[2] = 3; y[3] = 4; y[4] = 5; std::cout << "y = " << y << std::endl; std::cout << "x - y " << (x - y) << std::endl; return 0; }
Ce qui donne :
(mando@velvet) (~) $ g++ vector.cpp
(mando@velvet) (~) $ ./a.out
x = [ 10 20 30 40 50 ]
y = [ 1 2 3 4 5 ]
x - y [ 9 18 27 36 45 ]
Bonne chance
Utilisateur anonyme
23 févr. 2017 à 18:39
23 févr. 2017 à 18:39
Ok merci c'est exactement ce que je cherchais.
mamiemando
Messages postés
33453
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
6 janvier 2025
7 812
24 févr. 2017 à 09:56
24 févr. 2017 à 09:56
De rien bonne continuation :-)
Utilisateur anonyme
>
mamiemando
Messages postés
33453
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
6 janvier 2025
25 févr. 2017 à 15:16
25 févr. 2017 à 15:16
Bonjour c'est encore moi,
Une simple question : Pourquoi certains de vos operateurs sont dans la classe et d'autre non , qu'est ce qui change ?
Une simple question : Pourquoi certains de vos operateurs sont dans la classe et d'autre non , qu'est ce qui change ?
mamiemando
Messages postés
33453
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
6 janvier 2025
7 812
27 févr. 2017 à 10:30
27 févr. 2017 à 10:30
Pour
Pour
Note cependant que dans la classe, cela signifie que l'opérande gauche est du type de ta classe. Or quand tu utilises
https://stackoverflow.com/questions/9351166/does-overloading-operator-works-inside-the-class
Bonne chance
[]tu n'as pas le choix car sinon ça ne compilera pas.
Pour
<<, +, -, il existe une syntaxe pour les déclarés à l'intérieur de la classe mais personnellement je préfère déclarer les opérateurs autant que possible en dehors de la classe, question de goûts.
Note cependant que dans la classe, cela signifie que l'opérande gauche est du type de ta classe. Or quand tu utilises
<<, c'est pour écrire dans un flux (e.g.
std::cout << x) donc clairement, le déclarer dans la classe serait un contre sens.
https://stackoverflow.com/questions/9351166/does-overloading-operator-works-inside-the-class
Bonne chance