Surchage d'opérateur
Résolu
Bonjour,
Je souhaite créer une méthode de la classe vecteur qui a pour but de retourner la différence entre l'instance et un autre Vecteur, mais il y a un problème car je n'y arrive pas, voilà la méthode avec l'opérateur
Je souhaite créer une méthode de la classe vecteur qui a pour but de retourner la différence entre l'instance et un autre Vecteur, mais il y a un problème car je n'y arrive pas, voilà la méthode avec l'opérateur
double Vecteur::soustractionVec(Vecteur const & autreVec) { return -autreVec; //ici l'idée est de faire : instance - autreVec mais je n'y arrive pas } Vecteur Vecteur::operator-(Vecteur const & source) { return Vecteur(m_x-source.m_x, m_y-source.m_y); //une simple soustraction de vecteur }
A voir également:
- Surchage d'opérateur
- Opérateur de réseau mobile - Guide
- 0466 quel opérateur - Forum Mobile
- 0668 quel opérateur ✓ - Forum Mobile
- 0758 quel opérateur - Forum Opérateurs & Réseaux mobiles
- 0650 quel opérateur - Forum Mobile
3 réponses
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
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