Ihr Code würde wie folgt aussehen:
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;
}
Das implizite „aktuelles Objekt“ für Elementfunktionen durch einen speziellen Wert mit dem Namen hingewiesen wird diese.Dann erhält *this
das Objekt (durch Dereferenzierung dieses), und es wird verwendet, um (über den Kopierkonstruktor) einen anderen Beutel mit dem Namen Ergebnis zu konstruieren.
Ich vermute, dieser Code von einer Hausaufgabe genommen wird, so dass Sie möglicherweise nicht die one true addition operator Muster verwenden können, aber es ist üblich, und Sie sollten sich dessen bewusst sein:
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;
}
Ist die Funktion 'operator +' fehlt eine 'return' Anweisung? –
Das sieht nicht wie gültiges C++ aus - neu ist das Schlüsselwort – Artyom
Wenn Sie Operatoren erstellen möchten, schlage ich vor, 'Boost.Operators' zu betrachten. Sie haben ähnliche Operatoren zusammen gruppiert (wie '+ =' und '+') und schreiben nur einen der Gruppe die anderen kostenlos zur Verfügung :) –