[solved] Operator << Überladen
-
Mein erster (und hoffentlich nicht letzter) Post

Ich habe folgendes Problem:
Ich arbeite z.Z. das Tutorial Programmieren in C++: Aufbau durch und komme im Abschnitt 4.6 - Aufgabe 2 nicht weiter. [Nehmt euch bitte die Zeit die kurze Aufgabe durchzulesen]
Ich bin soweit, dass ich immer nur eine Firma per "<<" übernehmen kann.
Schreibe ich in meiner main.cpp z.B.#include <iostream> #include "firma.h" int main() { firma A("A"), B("B"), C("C"); A<<B<<C; A.firmen(); }, so wird in A nur gespeichert, dass C übernommen wurde.
Mache ich es allerdings der Reihe nach und nicht in einer Zeile wird korrekt ausgegeben, dass Firma A Firma B übernommen hat:#include <iostream> #include "firma.h" int main() { firma A("A"), B("B"), C("C"); B<<C; A<<B; A.firmen(); }Außerdem kriege ich es irgendwie nicht hin, dass ich mehrere übernommene Firmen im Array speichern kann, aber seht euch mal selbst meine firma.h an:
#include <string> #include <iostream> class firma { std::string Name; std::string Uebernommen[10]; public: firma(std::string name); void firmen(); void operator+(firma &F2); firma &operator<<(firma &F1) ///HIER IST DER ENTSCHEIDENDE TEIL! { Uebernommen[0]=F1.Name; return *this; } };Wäre echt klasse, wenn jemand sich ein paar Minuten nehmen würde, mir den richtigen Weg zu weisen oder noch besser ein fach selbst die Aufgabe zu lösen (dürfte eigentlich kein Problem für die meisten sein).
Bin ja gespannt ob jemand 'ne Idee hat.
Bye
p.s.: Natürlich existiert auch eine firma.cpp, aber diese habe ich einfach mal nicht gepostet und die wichtige Funktion direkt im Header definiert.
-
Du speicherst den name der übernommenen firma immer in übernommen[0] ab.
Du musst die einträge des arrays nach hinten verschieben bervor du soetwas machst(auch andersherum möglich, falls irgendeiner wegen besseren methoden meckert etc.)
-
Hab daraufhin einfach mal folgendes probiert:
Ausschnitt aus firma.hfirma &operator<<(firma &F1) ///HIER IST DER ENTSCHEIDENDE TEIL! { for (int i=0;i<10;++i) { if (Uebernommen[i]!="") { break; } else { Uebernommen[i]=F1.Name; } } return *this; }Es wird halt kontrolliert ob an der Stelle i im Uebernommen-Array schon was steht. Ist das der Fall soll if abgebrochen werden und das ganze mit [i+1] probiert werden uws. bis da mal nichts steht. An der Stelle die im Array frei ist, soll dann der Name der übernommenen Firma gespeichert werden (hoffe der Code tut das soeben beschriebene). Jetzt wird zumindest bei A<<B<<C gespeichert, dass B übernommen wurde. Allerdings sieht Uebernommen[10] dann so aus {B,B,B,B,B,B,B,B,B,B}. Aber wieso?

-
Schau Dir den Code nochmal an. Der macht nicht das, was Du darunter in eigenen Worten beschrieben hast.
-
Hab es wieder überarbeitet und jetzt funktioniert es. Ausschnitt aus firma.h :
firma &operator<<(firma &F1) ///HIER IST DER ENTSCHEIDENDE TEIL! { for (int i=0;i<10;++i) { if (Uebernommen[i]=="") { Uebernommen[i]=F1.Name; break; } } return *this; }Jetzt wird kontrolliert ob die Stelle [i] im Array leer ist . Wenn "leer" wird dort der Name eingetragen. Ansonsten wird's mit [i+1],[i+2], usw. probiert.
Danke, bye :p