Votre code ressemblerait à ceci:
class Bag {
public:
Bag();
Bag(Bag const& other); // copy ctor, declared implicitly if you don't declare it
~Bag();
Bag operator+(Bag const& other) const;
private:
int x;
int y;
};
Bag Bag::operator+(Bag const& other) const {
Bag result (*this);
result.x += other.x;
result.y += other.y;
return result;
}
L'implicite « objet courant » pour les fonctions de membre est pointée par une valeur spéciale nommée ce.Puis obtient cet objet (en déréférencant ce), et il est utilisé pour construire (via le constructeur de copie) un autre sac nommé résultat.
Je soupçonne que ce code est tiré d'un devoir à la maison, alors vous pourriez ne pas être en mesure d'utiliser le modèle one true addition operator, mais il est courant et vous devriez être au courant:
struct Bag {
//...
Bag& operator+=(Bag const& other) {
x += other.x;
y += other.y;
return *this; // return a reference to the "current object"
// as almost all operator=, operator+=, etc. should do
}
};
Bag operator+(Bag a, Bag const& b) {
// notice a is passed by value, so it's a copy
a += b;
return a;
}
La fonction 'operator +' manque-t-elle une instruction 'return'? –
Cela ne semble pas être valide C++ - new is keyword – Artyom
Si vous souhaitez créer des opérateurs, je vous suggère de regarder 'Boost.Operators'. Ils ont regroupé des opérateurs similaires (comme '+ =' et '+') et en écrivant un seul du groupe vous accorde les autres gratuitement :) –