[Gelöst] Probleme beim Überladen von Operatoren
-
Ok, danke. Ich habe aber noch eine kleinen Fehler gemacht. Es muss natürlich this->real und this->imaginary heißten.
MfG
-
Zagatho_zero87 schrieb:
Wobei ich deine Lösung auch interessant finde. Werd ich gleich mal ausprobieren.
Und dann liest du noch mal schnell den Beitrag von Nexus.
Und deine temp-Variablen sind auch, na ja, zumindest Ansichtssache. Zugegeben, für das Kompilat wird das keinen Unterschied machen, aber Übersichtlicher wird das dadurch jetzt nicht gerade, oder? :p
-
Ja übersichtlicher nicht, das stimmt.
Was gefällt dir besser:
DiesComplex operator-(const Complex& a, const Complex& b){ Complex Complex_temp(a.get_real()-b.get_real(), a.get_imag()-b.get_imag()); return Complex_temp; }oder das
Complex operator-(const Complex& a, const Complex& b){ double lokal_imag_1=a.get_imag(); double lokal_real_1=a.get_real(); double lokal_imag_2=b.get_imag(); double lokal_real_2=b.get_real(); Complex Complex_sum(lokal_real_1-lokal_real_2, lokal_imag_1-lokal_imag_2); return Complex_sum; }Da die Summenbildung Complex_sum(...) ist in beiden Fällen ca. gleich lang. Aber es fallen die lokalen Variablen weg.
-
Beide doof. Diese beiden Varianten würden für mich infrage kommen: (solche lokalen Variablen werden natürlich eh wegoptimiert, das was rauskommt ist also das Gleiche.)
Complex operator - (const Complex& lhs, const Complex& rhs) { return Complex(lhs.real() - rhs.real(), lhs.imag() - rhs.imag()); } Complex operator - (const Complex& lhs, const Complex& rhs) { double real = lhs.real() - rhs.real(); double imag = lhs.imag() - rhs.imag(); return Complex(real, imag); }Aber da kommen wir doch langsam in einen Stilbereich der kaum noch sachlich diskutiert werden kann, insofern mach halt was dir Spaß macht.

-
OK diese beiden gefallen mir auch besser

Warum ich oft nacht dem Stil frage ist, weil ich mit dem Buch C von A bis Z gelernt habe (ca. 3-4 Monate) und dann auf C++ umgestiegen bin (C++Primer und Die C++ Programmiersprache) und ich IMHO immer noch den Stil von C von A bis Z mitschleppe.
-
Sehr hilfreicher Thread, danke.
Jedoch verstehe ich die Operationsüberladung des <<-Operators nicht.ostream& operator <<( std::ostream& os, const Vec& data ) { return os << data.x1; }Warum muss std::ostream& os als Parameter mit dazu? Ich würde mich über eine Erklärung sehr freuen.
MfG yihaaa
-
yihaaa schrieb:
Warum muss std::ostream& os als Parameter mit dazu? Ich würde mich über eine Erklärung sehr freuen.
Weil da reingeschrieben wird?

-
Ja könnte man den auch std::cout direkt da nehmen und den Parameter weglassen?
MfG
-
yihaaa schrieb:
Ja könnte man den auch std::cout direkt da nehmen und den Parameter weglassen?
Warum denn das? schreib eine Funktion print() ohne Parameter, die macht das auch. Der operator<< ist ja eben dafür da, generisch für alle ostreams zu funktionieren, sei es jetzt cout, ein fstream oder was eigenes von ostream abgeleitetes.
-
yihaaa schrieb:
Ja könnte man den auch std::cout direkt da nehmen und den Parameter weglassen?
Der operator << braucht eh zwei Operanden, von daher nicht nur nicht sinnvoll, sondern auch unmöglich.
