Stringklasse,operatorüberladung...arghl
-
danke....
nun habe ich aber gehört...friend soll man nicht nehmen?
-
Shade Of Mine schrieb:
das mit b+a war ein Fehler von mir
hab nicht genau nachgedacht und nach sturer gewohnheit den 1. parameter als lhs angenommen und ohne nachzudenken wurde dann this zum rhs.
Gebs zu, du hast absichtlich 2 pitfalls eingebaut.
Man.bloed schrieb:
nun habe ich aber gehört...friend soll man nicht nehmen?
Keine Ahnungen wo du das gehört hast. Aber da hat der Autor sicher etwas übertrieben. Natürlich sollte man friend mit Bedacht verwenden, aber vollkommen darauf zu verzichten, ist Unsinn. Gerade bei solchen Operatoren sind sie hilfreich, und du brichst damit ja auch nicht den bestehenden Klassenschutz.
-
Michael E. schrieb:
Eine lokale Variable darf doch eh nicht verändert ewrden oder seh ich da was falsch?
Minimal Beispiel:
class Foo { public: Foo(): a_(0) {} Foo(int a): a_(a) {} Foo& operator+=(Foo const& a) { this->a_ += a.a_; return *this; } private: int a_; }; Foo operator+(Foo const& a, Foo const& b) { Foo temp(a); temp+=b; return temp; } int main() { Foo a(1), b(2), c(3); a + b = c; // geht int d(1), e(2), f(3); d + e = f; // geht nicht!! }
Alleine schon um den gleichen Effekt wie bei den Ints zu haben, sollte man den Rückgabewert const machen.